@andreagiugni/tailwind-dashboard-ui 0.1.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.
Files changed (66) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +282 -0
  3. package/dist/Editor-uOYxR3HX.d.cts +53 -0
  4. package/dist/Editor-uOYxR3HX.d.ts +53 -0
  5. package/dist/chunk-4OETC46A.js +353 -0
  6. package/dist/chunk-4OETC46A.js.map +1 -0
  7. package/dist/chunk-7OWZKV75.js +420 -0
  8. package/dist/chunk-7OWZKV75.js.map +1 -0
  9. package/dist/chunk-BGA7AECV.cjs +152 -0
  10. package/dist/chunk-BGA7AECV.cjs.map +1 -0
  11. package/dist/chunk-HT7SQXRF.cjs +85 -0
  12. package/dist/chunk-HT7SQXRF.cjs.map +1 -0
  13. package/dist/chunk-HZQZC5CK.js +124 -0
  14. package/dist/chunk-HZQZC5CK.js.map +1 -0
  15. package/dist/chunk-MEU4PMP5.js +146 -0
  16. package/dist/chunk-MEU4PMP5.js.map +1 -0
  17. package/dist/chunk-MYOOZFHK.cjs +430 -0
  18. package/dist/chunk-MYOOZFHK.cjs.map +1 -0
  19. package/dist/chunk-OSIOO5AE.cjs +130 -0
  20. package/dist/chunk-OSIOO5AE.cjs.map +1 -0
  21. package/dist/chunk-R66LONPQ.js +83 -0
  22. package/dist/chunk-R66LONPQ.js.map +1 -0
  23. package/dist/chunk-W7SNEBD7.cjs +362 -0
  24. package/dist/chunk-W7SNEBD7.cjs.map +1 -0
  25. package/dist/chunk-YERNSNT4.cjs +13 -0
  26. package/dist/chunk-YERNSNT4.cjs.map +1 -0
  27. package/dist/chunk-ZLIYUUA4.js +11 -0
  28. package/dist/chunk-ZLIYUUA4.js.map +1 -0
  29. package/dist/components/Calendar/Calendar.cjs +14 -0
  30. package/dist/components/Calendar/Calendar.cjs.map +1 -0
  31. package/dist/components/Calendar/Calendar.d.cts +12 -0
  32. package/dist/components/Calendar/Calendar.d.ts +12 -0
  33. package/dist/components/Calendar/Calendar.js +5 -0
  34. package/dist/components/Calendar/Calendar.js.map +1 -0
  35. package/dist/components/Charts/BarChart.cjs +13 -0
  36. package/dist/components/Charts/BarChart.cjs.map +1 -0
  37. package/dist/components/Charts/BarChart.d.cts +13 -0
  38. package/dist/components/Charts/BarChart.d.ts +13 -0
  39. package/dist/components/Charts/BarChart.js +4 -0
  40. package/dist/components/Charts/BarChart.js.map +1 -0
  41. package/dist/components/Charts/LineChart.cjs +13 -0
  42. package/dist/components/Charts/LineChart.cjs.map +1 -0
  43. package/dist/components/Charts/LineChart.d.cts +13 -0
  44. package/dist/components/Charts/LineChart.d.ts +13 -0
  45. package/dist/components/Charts/LineChart.js +4 -0
  46. package/dist/components/Charts/LineChart.js.map +1 -0
  47. package/dist/components/Editor/Editor.cjs +14 -0
  48. package/dist/components/Editor/Editor.cjs.map +1 -0
  49. package/dist/components/Editor/Editor.d.cts +3 -0
  50. package/dist/components/Editor/Editor.d.ts +3 -0
  51. package/dist/components/Editor/Editor.js +5 -0
  52. package/dist/components/Editor/Editor.js.map +1 -0
  53. package/dist/components/Map/CountryMap.cjs +13 -0
  54. package/dist/components/Map/CountryMap.cjs.map +1 -0
  55. package/dist/components/Map/CountryMap.d.cts +13 -0
  56. package/dist/components/Map/CountryMap.d.ts +13 -0
  57. package/dist/components/Map/CountryMap.js +4 -0
  58. package/dist/components/Map/CountryMap.js.map +1 -0
  59. package/dist/index.cjs +2896 -0
  60. package/dist/index.cjs.map +1 -0
  61. package/dist/index.d.cts +573 -0
  62. package/dist/index.d.ts +573 -0
  63. package/dist/index.js +2816 -0
  64. package/dist/index.js.map +1 -0
  65. package/package.json +134 -0
  66. package/src/theme.css +784 -0
@@ -0,0 +1,420 @@
1
+ "use client";
2
+ import { cn } from './chunk-ZLIYUUA4.js';
3
+ import { useRef, useEffect, useState } from 'react';
4
+ import FullCalendar from '@fullcalendar/react';
5
+ import dayGridPlugin from '@fullcalendar/daygrid';
6
+ import timeGridPlugin from '@fullcalendar/timegrid';
7
+ import interactionPlugin from '@fullcalendar/interaction';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ var BLOB_PATH = "M34.364 6.85053C38.6205 -2.28351 51.3795 -2.28351 55.636 6.85053C58.0129 11.951 63.5594 14.6722 68.9556 13.3853C78.6192 11.0807 86.5743 21.2433 82.2185 30.3287C79.7862 35.402 81.1561 41.5165 85.5082 45.0122C93.3019 51.2725 90.4628 63.9451 80.7747 66.1403C75.3648 67.3661 71.5265 72.2695 71.5572 77.9156C71.6123 88.0265 60.1169 93.6664 52.3918 87.3184C48.0781 83.7737 41.9219 83.7737 37.6082 87.3184C29.8831 93.6664 18.3877 88.0266 18.4428 77.9156C18.4735 72.2695 14.6352 67.3661 9.22531 66.1403C-0.462787 63.9451 -3.30193 51.2725 4.49185 45.0122C8.84391 41.5165 10.2138 35.402 7.78151 30.3287C3.42572 21.2433 11.3808 11.0807 21.0444 13.3853C26.4406 14.6722 31.9871 11.951 34.364 6.85053Z";
11
+ var VARIANTS = {
12
+ success: {
13
+ blob: "fill-success-50 dark:fill-success-500/15",
14
+ icon: "fill-success-600 dark:fill-success-500",
15
+ iconPath: "M5.9375 19.0004C5.9375 11.7854 11.7864 5.93652 19.0014 5.93652C26.2164 5.93652 32.0653 11.7854 32.0653 19.0004C32.0653 26.2154 26.2164 32.0643 19.0014 32.0643C11.7864 32.0643 5.9375 26.2154 5.9375 19.0004ZM19.0014 2.93652C10.1296 2.93652 2.9375 10.1286 2.9375 19.0004C2.9375 27.8723 10.1296 35.0643 19.0014 35.0643C27.8733 35.0643 35.0653 27.8723 35.0653 19.0004C35.0653 10.1286 27.8733 2.93652 19.0014 2.93652ZM24.7855 17.0575C25.3713 16.4717 25.3713 15.522 24.7855 14.9362C24.1997 14.3504 23.25 14.3504 22.6642 14.9362L17.7177 19.8827L15.3387 17.5037C14.7529 16.9179 13.8031 16.9179 13.2173 17.5037C12.6316 18.0894 12.6316 19.0392 13.2173 19.625L16.657 23.0647C16.9383 23.346 17.3199 23.504 17.7177 23.504C18.1155 23.504 18.4971 23.346 18.7784 23.0647L24.7855 17.0575Z",
16
+ button: "bg-success-500 hover:bg-success-600"
17
+ },
18
+ info: {
19
+ blob: "fill-blue-light-50 dark:fill-blue-light-500/15",
20
+ icon: "fill-blue-light-500 dark:fill-blue-light-500",
21
+ iconPath: "M5.85547 18.9998C5.85547 11.7396 11.7411 5.854 19.0013 5.854C26.2615 5.854 32.1471 11.7396 32.1471 18.9998C32.1471 26.2601 26.2615 32.1457 19.0013 32.1457C11.7411 32.1457 5.85547 26.2601 5.85547 18.9998ZM19.0013 2.854C10.0842 2.854 2.85547 10.0827 2.85547 18.9998C2.85547 27.9169 10.0842 35.1457 19.0013 35.1457C27.9184 35.1457 35.1471 27.9169 35.1471 18.9998C35.1471 10.0827 27.9184 2.854 19.0013 2.854ZM16.9999 11.9145C16.9999 13.0191 17.8953 13.9145 18.9999 13.9145H19.0015C20.106 13.9145 21.0015 13.0191 21.0015 11.9145C21.0015 10.81 20.106 9.91454 19.0015 9.91454H18.9999C17.8953 9.91454 16.9999 10.81 16.9999 11.9145ZM19.0014 27.8171C18.173 27.8171 17.5014 27.1455 17.5014 26.3171V17.3293C17.5014 16.5008 18.173 15.8293 19.0014 15.8293C19.8299 15.8293 20.5014 16.5008 20.5014 17.3293L20.5014 26.3171C20.5014 27.1455 19.8299 27.8171 19.0014 27.8171Z",
22
+ button: "bg-blue-light-500 hover:bg-blue-light-600"
23
+ },
24
+ warning: {
25
+ blob: "fill-warning-50 dark:fill-warning-500/15",
26
+ icon: "fill-warning-600 dark:fill-orange-400",
27
+ iconPath: "M32.1445 19.0002C32.1445 26.2604 26.2589 32.146 18.9987 32.146C11.7385 32.146 5.85287 26.2604 5.85287 19.0002C5.85287 11.7399 11.7385 5.85433 18.9987 5.85433C26.2589 5.85433 32.1445 11.7399 32.1445 19.0002ZM18.9987 35.146C27.9158 35.146 35.1445 27.9173 35.1445 19.0002C35.1445 10.0831 27.9158 2.85433 18.9987 2.85433C10.0816 2.85433 2.85287 10.0831 2.85287 19.0002C2.85287 27.9173 10.0816 35.146 18.9987 35.146ZM21.0001 26.0855C21.0001 24.9809 20.1047 24.0855 19.0001 24.0855L18.9985 24.0855C17.894 24.0855 16.9985 24.9809 16.9985 26.0855C16.9985 27.19 17.894 28.0855 18.9985 28.0855L19.0001 28.0855C20.1047 28.0855 21.0001 27.19 21.0001 26.0855ZM18.9986 10.1829C19.827 10.1829 20.4986 10.8545 20.4986 11.6829L20.4986 20.6707C20.4986 21.4992 19.827 22.1707 18.9986 22.1707C18.1701 22.1707 17.4986 21.4992 17.4986 20.6707L17.4986 11.6829C17.4986 10.8545 18.1701 10.1829 18.9986 10.1829Z",
28
+ button: "bg-warning-500 hover:bg-warning-600"
29
+ },
30
+ danger: {
31
+ blob: "fill-error-50 dark:fill-error-500/15",
32
+ icon: "fill-error-600 dark:fill-error-500",
33
+ iconPath: "M9.62684 11.7496C9.04105 11.1638 9.04105 10.2141 9.62684 9.6283C10.2126 9.04252 11.1624 9.04252 11.7482 9.6283L18.9985 16.8786L26.2485 9.62851C26.8343 9.04273 27.7841 9.04273 28.3699 9.62851C28.9556 10.2143 28.9556 11.164 28.3699 11.7498L21.1198 18.9999L28.3699 26.25C28.9556 26.8358 28.9556 27.7855 28.3699 28.3713C27.7841 28.9571 26.8343 28.9571 26.2485 28.3713L18.9985 21.1212L11.7482 28.3715C11.1624 28.9573 10.2126 28.9573 9.62684 28.3715C9.04105 27.7857 9.04105 26.836 9.62684 26.2502L16.8771 18.9999L9.62684 11.7496Z",
34
+ button: "bg-error-500 hover:bg-error-600"
35
+ }
36
+ };
37
+ var ModalAlert = ({ variant, title, description, actionText, onAction }) => {
38
+ const v = VARIANTS[variant];
39
+ return /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
40
+ /* @__PURE__ */ jsxs("div", { className: "relative z-1 mb-7 flex items-center justify-center", children: [
41
+ /* @__PURE__ */ jsx("svg", { className: v.blob, width: "90", height: "90", viewBox: "0 0 90 90", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: BLOB_PATH }) }),
42
+ /* @__PURE__ */ jsx("span", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx("svg", { className: v.icon, width: "38", height: "38", viewBox: "0 0 38 38", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: v.iconPath }) }) })
43
+ ] }),
44
+ title && /* @__PURE__ */ jsx("h4", { className: "mb-2 text-2xl font-semibold text-gray-800 dark:text-white/90", children: title }),
45
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm leading-6 text-gray-500 dark:text-gray-400", children: description }),
46
+ /* @__PURE__ */ jsx("div", { className: "mt-7 flex w-full items-center justify-center gap-3", children: /* @__PURE__ */ jsx(
47
+ "button",
48
+ {
49
+ type: "button",
50
+ onClick: onAction,
51
+ className: cn(
52
+ "flex w-full justify-center rounded-lg px-4 py-3 text-sm font-medium text-white shadow-theme-xs sm:w-auto",
53
+ v.button
54
+ ),
55
+ children: actionText
56
+ }
57
+ ) })
58
+ ] });
59
+ };
60
+ var Modal = ({
61
+ isOpen,
62
+ onClose,
63
+ children,
64
+ className,
65
+ showCloseButton = true,
66
+ isFullscreen = false,
67
+ closeOnBackdrop = true,
68
+ closeOnEsc = true,
69
+ variant,
70
+ title,
71
+ description,
72
+ actionText = "Okay, Got It",
73
+ onAction,
74
+ ...rest
75
+ }) => {
76
+ const modalRef = useRef(null);
77
+ useEffect(() => {
78
+ const handleEscape = (event) => {
79
+ if (event.key === "Escape") {
80
+ onClose();
81
+ }
82
+ };
83
+ if (isOpen && closeOnEsc) {
84
+ document.addEventListener("keydown", handleEscape);
85
+ }
86
+ return () => {
87
+ document.removeEventListener("keydown", handleEscape);
88
+ };
89
+ }, [isOpen, onClose, closeOnEsc]);
90
+ useEffect(() => {
91
+ if (isOpen) {
92
+ document.body.style.overflow = "hidden";
93
+ } else {
94
+ document.body.style.overflow = "unset";
95
+ }
96
+ return () => {
97
+ document.body.style.overflow = "unset";
98
+ };
99
+ }, [isOpen]);
100
+ if (!isOpen) return null;
101
+ const isAlert = !!variant;
102
+ const contentClasses = isFullscreen ? "w-full h-full tdui-modal-fade" : cn(
103
+ "relative w-full rounded-3xl bg-white dark:bg-gray-900 tdui-modal-pop",
104
+ isAlert && "max-w-[600px] p-5 lg:p-10"
105
+ );
106
+ return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 flex items-center justify-center overflow-y-auto modal z-99999", children: [
107
+ !isFullscreen && /* @__PURE__ */ jsx(
108
+ "div",
109
+ {
110
+ className: "tdui-modal-fade fixed inset-0 h-full w-full bg-gray-400/50 backdrop-blur-[32px]",
111
+ onClick: closeOnBackdrop ? onClose : void 0
112
+ }
113
+ ),
114
+ /* @__PURE__ */ jsxs(
115
+ "div",
116
+ {
117
+ ref: modalRef,
118
+ className: cn(contentClasses, className),
119
+ onClick: (e) => e.stopPropagation(),
120
+ ...rest,
121
+ children: [
122
+ showCloseButton && /* @__PURE__ */ jsx(
123
+ "button",
124
+ {
125
+ onClick: onClose,
126
+ className: "absolute right-3 top-3 z-999 flex h-9.5 w-9.5 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:right-6 sm:top-6 sm:h-11 sm:w-11",
127
+ children: /* @__PURE__ */ jsx(
128
+ "svg",
129
+ {
130
+ width: "24",
131
+ height: "24",
132
+ viewBox: "0 0 24 24",
133
+ fill: "none",
134
+ xmlns: "http://www.w3.org/2000/svg",
135
+ children: /* @__PURE__ */ jsx(
136
+ "path",
137
+ {
138
+ fillRule: "evenodd",
139
+ clipRule: "evenodd",
140
+ d: "M6.04289 16.5413C5.65237 16.9318 5.65237 17.565 6.04289 17.9555C6.43342 18.346 7.06658 18.346 7.45711 17.9555L11.9987 13.4139L16.5408 17.956C16.9313 18.3466 17.5645 18.3466 17.955 17.956C18.3455 17.5655 18.3455 16.9323 17.955 16.5418L13.4129 11.9997L17.955 7.4576C18.3455 7.06707 18.3455 6.43391 17.955 6.04338C17.5645 5.65286 16.9313 5.65286 16.5408 6.04338L11.9987 10.5855L7.45711 6.0439C7.06658 5.65338 6.43342 5.65338 6.04289 6.0439C5.65237 6.43442 5.65237 7.06759 6.04289 7.45811L10.5845 11.9997L6.04289 16.5413Z",
141
+ fill: "currentColor"
142
+ }
143
+ )
144
+ }
145
+ )
146
+ }
147
+ ),
148
+ isAlert ? /* @__PURE__ */ jsx(
149
+ ModalAlert,
150
+ {
151
+ variant,
152
+ title,
153
+ description,
154
+ actionText,
155
+ onAction: onAction ?? onClose
156
+ }
157
+ ) : /* @__PURE__ */ jsx("div", { children })
158
+ ]
159
+ }
160
+ )
161
+ ] });
162
+ };
163
+ var defaultEvents = [
164
+ {
165
+ id: "1",
166
+ title: "Event Conf.",
167
+ start: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
168
+ extendedProps: { calendar: "Danger" }
169
+ },
170
+ {
171
+ id: "2",
172
+ title: "Meeting",
173
+ start: new Date(Date.now() + 864e5).toISOString().split("T")[0],
174
+ extendedProps: { calendar: "Success" }
175
+ },
176
+ {
177
+ id: "3",
178
+ title: "Workshop",
179
+ start: new Date(Date.now() + 1728e5).toISOString().split("T")[0],
180
+ end: new Date(Date.now() + 2592e5).toISOString().split("T")[0],
181
+ extendedProps: { calendar: "Primary" }
182
+ }
183
+ ];
184
+ var Calendar = ({
185
+ events: eventsProp,
186
+ initialView = "dayGridMonth",
187
+ onEventClick,
188
+ onDateSelect
189
+ }) => {
190
+ const [selectedEvent, setSelectedEvent] = useState(
191
+ null
192
+ );
193
+ const [eventTitle, setEventTitle] = useState("");
194
+ const [eventStartDate, setEventStartDate] = useState("");
195
+ const [eventEndDate, setEventEndDate] = useState("");
196
+ const [eventLevel, setEventLevel] = useState("");
197
+ const [events, setEvents] = useState(eventsProp ?? []);
198
+ const [isOpen, setIsOpen] = useState(false);
199
+ const calendarRef = useRef(null);
200
+ const openModal = () => setIsOpen(true);
201
+ const closeModal = () => setIsOpen(false);
202
+ const calendarsEvents = {
203
+ Danger: "danger",
204
+ Success: "success",
205
+ Primary: "primary",
206
+ Warning: "warning"
207
+ };
208
+ useEffect(() => {
209
+ setEvents(eventsProp ?? defaultEvents);
210
+ }, [eventsProp]);
211
+ const handleDateSelect = (selectInfo) => {
212
+ onDateSelect?.(selectInfo);
213
+ resetModalFields();
214
+ setEventStartDate(selectInfo.startStr);
215
+ setEventEndDate(selectInfo.endStr || selectInfo.startStr);
216
+ openModal();
217
+ };
218
+ const handleEventClick = (clickInfo) => {
219
+ onEventClick?.(clickInfo);
220
+ const event = clickInfo.event;
221
+ setSelectedEvent(event);
222
+ setEventTitle(event.title);
223
+ setEventStartDate(event.start?.toISOString().split("T")[0] || "");
224
+ setEventEndDate(event.end?.toISOString().split("T")[0] || "");
225
+ setEventLevel(event.extendedProps.calendar);
226
+ openModal();
227
+ };
228
+ const handleAddOrUpdateEvent = () => {
229
+ if (selectedEvent) {
230
+ setEvents(
231
+ (prevEvents) => prevEvents.map(
232
+ (event) => event.id === selectedEvent.id ? {
233
+ ...event,
234
+ title: eventTitle,
235
+ start: eventStartDate,
236
+ end: eventEndDate,
237
+ extendedProps: { calendar: eventLevel }
238
+ } : event
239
+ )
240
+ );
241
+ } else {
242
+ const newEvent = {
243
+ id: Date.now().toString(),
244
+ title: eventTitle,
245
+ start: eventStartDate,
246
+ end: eventEndDate,
247
+ allDay: true,
248
+ extendedProps: { calendar: eventLevel }
249
+ };
250
+ setEvents((prevEvents) => [...prevEvents, newEvent]);
251
+ }
252
+ closeModal();
253
+ resetModalFields();
254
+ };
255
+ const resetModalFields = () => {
256
+ setEventTitle("");
257
+ setEventStartDate("");
258
+ setEventEndDate("");
259
+ setEventLevel("");
260
+ setSelectedEvent(null);
261
+ };
262
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]", children: [
263
+ /* @__PURE__ */ jsx("div", { className: "custom-calendar", children: /* @__PURE__ */ jsx(
264
+ FullCalendar,
265
+ {
266
+ ref: calendarRef,
267
+ plugins: [dayGridPlugin, timeGridPlugin, interactionPlugin],
268
+ initialView,
269
+ headerToolbar: {
270
+ left: "prev,next addEventButton",
271
+ center: "title",
272
+ right: "dayGridMonth,timeGridWeek,timeGridDay"
273
+ },
274
+ events,
275
+ selectable: true,
276
+ select: handleDateSelect,
277
+ eventClick: handleEventClick,
278
+ eventContent: renderEventContent,
279
+ customButtons: {
280
+ addEventButton: {
281
+ text: "Add Event +",
282
+ click: openModal
283
+ }
284
+ }
285
+ }
286
+ ) }),
287
+ /* @__PURE__ */ jsx(
288
+ Modal,
289
+ {
290
+ isOpen,
291
+ onClose: closeModal,
292
+ className: "max-w-[700px] p-6 lg:p-10",
293
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col px-2 overflow-y-auto custom-scrollbar", children: [
294
+ /* @__PURE__ */ jsxs("div", { children: [
295
+ /* @__PURE__ */ jsx("h5", { className: "mb-2 font-semibold text-gray-800 modal-title text-theme-xl dark:text-white/90 lg:text-2xl", children: selectedEvent ? "Edit Event" : "Add Event" }),
296
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Plan your next big moment: schedule or edit an event to stay on track" })
297
+ ] }),
298
+ /* @__PURE__ */ jsxs("div", { className: "mt-8", children: [
299
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { children: [
300
+ /* @__PURE__ */ jsx("label", { className: "mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400", children: "Event Title" }),
301
+ /* @__PURE__ */ jsx(
302
+ "input",
303
+ {
304
+ id: "event-title",
305
+ type: "text",
306
+ value: eventTitle,
307
+ onChange: (e) => setEventTitle(e.target.value),
308
+ className: "dark:bg-dark-900 h-11 w-full rounded-lg border border-gray-300 bg-transparent px-4 py-2.5 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
309
+ }
310
+ )
311
+ ] }) }),
312
+ /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
313
+ /* @__PURE__ */ jsx("label", { className: "block mb-4 text-sm font-medium text-gray-700 dark:text-gray-400", children: "Event Color" }),
314
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-4 sm:gap-5", children: Object.entries(calendarsEvents).map(([key, value]) => /* @__PURE__ */ jsx("div", { className: "n-chk", children: /* @__PURE__ */ jsx(
315
+ "div",
316
+ {
317
+ className: `form-check form-check-${value} form-check-inline`,
318
+ children: /* @__PURE__ */ jsxs(
319
+ "label",
320
+ {
321
+ className: "flex items-center text-sm text-gray-700 form-check-label dark:text-gray-400",
322
+ htmlFor: `modal${key}`,
323
+ children: [
324
+ /* @__PURE__ */ jsxs("span", { className: "relative", children: [
325
+ /* @__PURE__ */ jsx(
326
+ "input",
327
+ {
328
+ className: "sr-only form-check-input",
329
+ type: "radio",
330
+ name: "event-level",
331
+ value: key,
332
+ id: `modal${key}`,
333
+ checked: eventLevel === key,
334
+ onChange: () => setEventLevel(key)
335
+ }
336
+ ),
337
+ /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center w-5 h-5 mr-2 border border-gray-300 rounded-full box dark:border-gray-700", children: /* @__PURE__ */ jsx(
338
+ "span",
339
+ {
340
+ className: `h-2 w-2 rounded-full bg-white ${eventLevel === key ? "block" : "hidden"}`
341
+ }
342
+ ) })
343
+ ] }),
344
+ key
345
+ ]
346
+ }
347
+ )
348
+ }
349
+ ) }, key)) })
350
+ ] }),
351
+ /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
352
+ /* @__PURE__ */ jsx("label", { className: "mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400", children: "Enter Start Date" }),
353
+ /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx(
354
+ "input",
355
+ {
356
+ id: "event-start-date",
357
+ type: "date",
358
+ value: eventStartDate,
359
+ onChange: (e) => setEventStartDate(e.target.value),
360
+ className: "dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
361
+ }
362
+ ) })
363
+ ] }),
364
+ /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
365
+ /* @__PURE__ */ jsx("label", { className: "mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400", children: "Enter End Date" }),
366
+ /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx(
367
+ "input",
368
+ {
369
+ id: "event-end-date",
370
+ type: "date",
371
+ value: eventEndDate,
372
+ onChange: (e) => setEventEndDate(e.target.value),
373
+ className: "dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
374
+ }
375
+ ) })
376
+ ] })
377
+ ] }),
378
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 mt-6 modal-footer sm:justify-end", children: [
379
+ /* @__PURE__ */ jsx(
380
+ "button",
381
+ {
382
+ onClick: closeModal,
383
+ type: "button",
384
+ className: "flex w-full justify-center rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] sm:w-auto",
385
+ children: "Close"
386
+ }
387
+ ),
388
+ /* @__PURE__ */ jsx(
389
+ "button",
390
+ {
391
+ onClick: handleAddOrUpdateEvent,
392
+ type: "button",
393
+ className: "btn btn-success btn-update-event flex w-full justify-center rounded-lg bg-brand-500 px-4 py-2.5 text-sm font-medium text-white hover:bg-brand-600 sm:w-auto",
394
+ children: selectedEvent ? "Update Changes" : "Add Event"
395
+ }
396
+ )
397
+ ] })
398
+ ] })
399
+ }
400
+ )
401
+ ] });
402
+ };
403
+ var renderEventContent = (eventInfo) => {
404
+ const colorClass = `fc-bg-${eventInfo.event.extendedProps.calendar.toLowerCase()}`;
405
+ return /* @__PURE__ */ jsxs(
406
+ "div",
407
+ {
408
+ className: `event-fc-color flex fc-event-main ${colorClass} p-1 rounded-sm`,
409
+ children: [
410
+ /* @__PURE__ */ jsx("div", { className: "fc-daygrid-event-dot" }),
411
+ /* @__PURE__ */ jsx("div", { className: "fc-event-time", children: eventInfo.timeText }),
412
+ /* @__PURE__ */ jsx("div", { className: "fc-event-title", children: eventInfo.event.title })
413
+ ]
414
+ }
415
+ );
416
+ };
417
+
418
+ export { Calendar, Modal };
419
+ //# sourceMappingURL=chunk-7OWZKV75.js.map
420
+ //# sourceMappingURL=chunk-7OWZKV75.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx","../src/components/Calendar/Calendar.tsx"],"names":["useRef","useEffect","jsxs","jsx"],"mappings":"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","file":"chunk-7OWZKV75.js","sourcesContent":["\"use client\";\nimport React, { useRef, useEffect } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type ModalVariant = \"success\" | \"info\" | \"warning\" | \"danger\";\n\nexport interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n isFullscreen?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n /** Render a preset alert layout (decorative icon + title + message + action button). */\n variant?: ModalVariant;\n /** Alert title — used when `variant` is set. */\n title?: string;\n /** Alert body text — used when `variant` is set. */\n description?: string;\n /** Action button label. Default: \"Okay, Got It\". */\n actionText?: string;\n /** Action button handler. Defaults to `onClose`. */\n onAction?: () => void;\n}\n\nconst BLOB_PATH =\n \"M34.364 6.85053C38.6205 -2.28351 51.3795 -2.28351 55.636 6.85053C58.0129 11.951 63.5594 14.6722 68.9556 13.3853C78.6192 11.0807 86.5743 21.2433 82.2185 30.3287C79.7862 35.402 81.1561 41.5165 85.5082 45.0122C93.3019 51.2725 90.4628 63.9451 80.7747 66.1403C75.3648 67.3661 71.5265 72.2695 71.5572 77.9156C71.6123 88.0265 60.1169 93.6664 52.3918 87.3184C48.0781 83.7737 41.9219 83.7737 37.6082 87.3184C29.8831 93.6664 18.3877 88.0266 18.4428 77.9156C18.4735 72.2695 14.6352 67.3661 9.22531 66.1403C-0.462787 63.9451 -3.30193 51.2725 4.49185 45.0122C8.84391 41.5165 10.2138 35.402 7.78151 30.3287C3.42572 21.2433 11.3808 11.0807 21.0444 13.3853C26.4406 14.6722 31.9871 11.951 34.364 6.85053Z\";\n\nconst VARIANTS: Record<\n ModalVariant,\n { blob: string; icon: string; iconPath: string; button: string }\n> = {\n success: {\n blob: \"fill-success-50 dark:fill-success-500/15\",\n icon: \"fill-success-600 dark:fill-success-500\",\n iconPath:\n \"M5.9375 19.0004C5.9375 11.7854 11.7864 5.93652 19.0014 5.93652C26.2164 5.93652 32.0653 11.7854 32.0653 19.0004C32.0653 26.2154 26.2164 32.0643 19.0014 32.0643C11.7864 32.0643 5.9375 26.2154 5.9375 19.0004ZM19.0014 2.93652C10.1296 2.93652 2.9375 10.1286 2.9375 19.0004C2.9375 27.8723 10.1296 35.0643 19.0014 35.0643C27.8733 35.0643 35.0653 27.8723 35.0653 19.0004C35.0653 10.1286 27.8733 2.93652 19.0014 2.93652ZM24.7855 17.0575C25.3713 16.4717 25.3713 15.522 24.7855 14.9362C24.1997 14.3504 23.25 14.3504 22.6642 14.9362L17.7177 19.8827L15.3387 17.5037C14.7529 16.9179 13.8031 16.9179 13.2173 17.5037C12.6316 18.0894 12.6316 19.0392 13.2173 19.625L16.657 23.0647C16.9383 23.346 17.3199 23.504 17.7177 23.504C18.1155 23.504 18.4971 23.346 18.7784 23.0647L24.7855 17.0575Z\",\n button: \"bg-success-500 hover:bg-success-600\",\n },\n info: {\n blob: \"fill-blue-light-50 dark:fill-blue-light-500/15\",\n icon: \"fill-blue-light-500 dark:fill-blue-light-500\",\n iconPath:\n \"M5.85547 18.9998C5.85547 11.7396 11.7411 5.854 19.0013 5.854C26.2615 5.854 32.1471 11.7396 32.1471 18.9998C32.1471 26.2601 26.2615 32.1457 19.0013 32.1457C11.7411 32.1457 5.85547 26.2601 5.85547 18.9998ZM19.0013 2.854C10.0842 2.854 2.85547 10.0827 2.85547 18.9998C2.85547 27.9169 10.0842 35.1457 19.0013 35.1457C27.9184 35.1457 35.1471 27.9169 35.1471 18.9998C35.1471 10.0827 27.9184 2.854 19.0013 2.854ZM16.9999 11.9145C16.9999 13.0191 17.8953 13.9145 18.9999 13.9145H19.0015C20.106 13.9145 21.0015 13.0191 21.0015 11.9145C21.0015 10.81 20.106 9.91454 19.0015 9.91454H18.9999C17.8953 9.91454 16.9999 10.81 16.9999 11.9145ZM19.0014 27.8171C18.173 27.8171 17.5014 27.1455 17.5014 26.3171V17.3293C17.5014 16.5008 18.173 15.8293 19.0014 15.8293C19.8299 15.8293 20.5014 16.5008 20.5014 17.3293L20.5014 26.3171C20.5014 27.1455 19.8299 27.8171 19.0014 27.8171Z\",\n button: \"bg-blue-light-500 hover:bg-blue-light-600\",\n },\n warning: {\n blob: \"fill-warning-50 dark:fill-warning-500/15\",\n icon: \"fill-warning-600 dark:fill-orange-400\",\n iconPath:\n \"M32.1445 19.0002C32.1445 26.2604 26.2589 32.146 18.9987 32.146C11.7385 32.146 5.85287 26.2604 5.85287 19.0002C5.85287 11.7399 11.7385 5.85433 18.9987 5.85433C26.2589 5.85433 32.1445 11.7399 32.1445 19.0002ZM18.9987 35.146C27.9158 35.146 35.1445 27.9173 35.1445 19.0002C35.1445 10.0831 27.9158 2.85433 18.9987 2.85433C10.0816 2.85433 2.85287 10.0831 2.85287 19.0002C2.85287 27.9173 10.0816 35.146 18.9987 35.146ZM21.0001 26.0855C21.0001 24.9809 20.1047 24.0855 19.0001 24.0855L18.9985 24.0855C17.894 24.0855 16.9985 24.9809 16.9985 26.0855C16.9985 27.19 17.894 28.0855 18.9985 28.0855L19.0001 28.0855C20.1047 28.0855 21.0001 27.19 21.0001 26.0855ZM18.9986 10.1829C19.827 10.1829 20.4986 10.8545 20.4986 11.6829L20.4986 20.6707C20.4986 21.4992 19.827 22.1707 18.9986 22.1707C18.1701 22.1707 17.4986 21.4992 17.4986 20.6707L17.4986 11.6829C17.4986 10.8545 18.1701 10.1829 18.9986 10.1829Z\",\n button: \"bg-warning-500 hover:bg-warning-600\",\n },\n danger: {\n blob: \"fill-error-50 dark:fill-error-500/15\",\n icon: \"fill-error-600 dark:fill-error-500\",\n iconPath:\n \"M9.62684 11.7496C9.04105 11.1638 9.04105 10.2141 9.62684 9.6283C10.2126 9.04252 11.1624 9.04252 11.7482 9.6283L18.9985 16.8786L26.2485 9.62851C26.8343 9.04273 27.7841 9.04273 28.3699 9.62851C28.9556 10.2143 28.9556 11.164 28.3699 11.7498L21.1198 18.9999L28.3699 26.25C28.9556 26.8358 28.9556 27.7855 28.3699 28.3713C27.7841 28.9571 26.8343 28.9571 26.2485 28.3713L18.9985 21.1212L11.7482 28.3715C11.1624 28.9573 10.2126 28.9573 9.62684 28.3715C9.04105 27.7857 9.04105 26.836 9.62684 26.2502L16.8771 18.9999L9.62684 11.7496Z\",\n button: \"bg-error-500 hover:bg-error-600\",\n },\n};\n\nconst ModalAlert: React.FC<{\n variant: ModalVariant;\n title?: string;\n description?: string;\n actionText: string;\n onAction: () => void;\n}> = ({ variant, title, description, actionText, onAction }) => {\n const v = VARIANTS[variant];\n return (\n <div className=\"text-center\">\n <div className=\"relative z-1 mb-7 flex items-center justify-center\">\n <svg className={v.blob} width=\"90\" height=\"90\" viewBox=\"0 0 90 90\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d={BLOB_PATH} />\n </svg>\n <span className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\">\n <svg className={v.icon} width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={v.iconPath} />\n </svg>\n </span>\n </div>\n {title && (\n <h4 className=\"mb-2 text-2xl font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h4>\n )}\n {description && (\n <p className=\"text-sm leading-6 text-gray-500 dark:text-gray-400\">{description}</p>\n )}\n <div className=\"mt-7 flex w-full items-center justify-center gap-3\">\n <button\n type=\"button\"\n onClick={onAction}\n className={cn(\n \"flex w-full justify-center rounded-lg px-4 py-3 text-sm font-medium text-white shadow-theme-xs sm:w-auto\",\n v.button\n )}\n >\n {actionText}\n </button>\n </div>\n </div>\n );\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n className,\n showCloseButton = true,\n isFullscreen = false,\n closeOnBackdrop = true,\n closeOnEsc = true,\n variant,\n title,\n description,\n actionText = \"Okay, Got It\",\n onAction,\n ...rest\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen && closeOnEsc) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const isAlert = !!variant;\n const contentClasses = isFullscreen\n ? \"w-full h-full tdui-modal-fade\"\n : cn(\n \"relative w-full rounded-3xl bg-white dark:bg-gray-900 tdui-modal-pop\",\n isAlert && \"max-w-[600px] p-5 lg:p-10\"\n );\n\n return (\n <div className=\"fixed inset-0 flex items-center justify-center overflow-y-auto modal z-99999\">\n {!isFullscreen && (\n <div\n className=\"tdui-modal-fade fixed inset-0 h-full w-full bg-gray-400/50 backdrop-blur-[32px]\"\n onClick={closeOnBackdrop ? onClose : undefined}\n ></div>\n )}\n <div\n ref={modalRef}\n className={cn(contentClasses, className)}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"absolute right-3 top-3 z-999 flex h-9.5 w-9.5 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:right-6 sm:top-6 sm:h-11 sm:w-11\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.04289 16.5413C5.65237 16.9318 5.65237 17.565 6.04289 17.9555C6.43342 18.346 7.06658 18.346 7.45711 17.9555L11.9987 13.4139L16.5408 17.956C16.9313 18.3466 17.5645 18.3466 17.955 17.956C18.3455 17.5655 18.3455 16.9323 17.955 16.5418L13.4129 11.9997L17.955 7.4576C18.3455 7.06707 18.3455 6.43391 17.955 6.04338C17.5645 5.65286 16.9313 5.65286 16.5408 6.04338L11.9987 10.5855L7.45711 6.0439C7.06658 5.65338 6.43342 5.65338 6.04289 6.0439C5.65237 6.43442 5.65237 7.06759 6.04289 7.45811L10.5845 11.9997L6.04289 16.5413Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n )}\n {isAlert ? (\n <ModalAlert\n variant={variant}\n title={title}\n description={description}\n actionText={actionText}\n onAction={onAction ?? onClose}\n />\n ) : (\n <div>{children}</div>\n )}\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport FullCalendar from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport {\n EventInput,\n DateSelectArg,\n EventClickArg,\n EventContentArg,\n} from \"@fullcalendar/core\";\nimport { Modal } from \"../Modal/Modal\";\n\ninterface CalendarEvent extends EventInput {\n extendedProps: {\n calendar: string;\n };\n}\n\nexport interface CalendarProps {\n events?: EventInput[];\n initialView?: string;\n onEventClick?: (arg: EventClickArg) => void;\n onDateSelect?: (arg: DateSelectArg) => void;\n}\n\nconst defaultEvents: CalendarEvent[] = [\n {\n id: \"1\",\n title: \"Event Conf.\",\n start: new Date().toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Danger\" },\n },\n {\n id: \"2\",\n title: \"Meeting\",\n start: new Date(Date.now() + 86400000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Success\" },\n },\n {\n id: \"3\",\n title: \"Workshop\",\n start: new Date(Date.now() + 172800000).toISOString().split(\"T\")[0],\n end: new Date(Date.now() + 259200000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Primary\" },\n },\n];\n\nexport const Calendar: React.FC<CalendarProps> = ({\n events: eventsProp,\n initialView = \"dayGridMonth\",\n onEventClick,\n onDateSelect,\n}) => {\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(\n null\n );\n const [eventTitle, setEventTitle] = useState(\"\");\n const [eventStartDate, setEventStartDate] = useState(\"\");\n const [eventEndDate, setEventEndDate] = useState(\"\");\n const [eventLevel, setEventLevel] = useState(\"\");\n const [events, setEvents] = useState<EventInput[]>(eventsProp ?? []);\n const [isOpen, setIsOpen] = useState(false);\n const calendarRef = useRef<FullCalendar>(null);\n\n const openModal = () => setIsOpen(true);\n const closeModal = () => setIsOpen(false);\n\n const calendarsEvents = {\n Danger: \"danger\",\n Success: \"success\",\n Primary: \"primary\",\n Warning: \"warning\",\n };\n\n useEffect(() => {\n // Initialize with provided events, or fall back to the demo events.\n setEvents(eventsProp ?? defaultEvents);\n }, [eventsProp]);\n\n const handleDateSelect = (selectInfo: DateSelectArg) => {\n onDateSelect?.(selectInfo);\n resetModalFields();\n setEventStartDate(selectInfo.startStr);\n setEventEndDate(selectInfo.endStr || selectInfo.startStr);\n openModal();\n };\n\n const handleEventClick = (clickInfo: EventClickArg) => {\n onEventClick?.(clickInfo);\n const event = clickInfo.event;\n setSelectedEvent(event as unknown as CalendarEvent);\n setEventTitle(event.title);\n setEventStartDate(event.start?.toISOString().split(\"T\")[0] || \"\");\n setEventEndDate(event.end?.toISOString().split(\"T\")[0] || \"\");\n setEventLevel(event.extendedProps.calendar);\n openModal();\n };\n\n const handleAddOrUpdateEvent = () => {\n if (selectedEvent) {\n // Update existing event\n setEvents((prevEvents) =>\n prevEvents.map((event) =>\n event.id === selectedEvent.id\n ? {\n ...event,\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n extendedProps: { calendar: eventLevel },\n }\n : event\n )\n );\n } else {\n // Add new event\n const newEvent: CalendarEvent = {\n id: Date.now().toString(),\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n allDay: true,\n extendedProps: { calendar: eventLevel },\n };\n setEvents((prevEvents) => [...prevEvents, newEvent]);\n }\n closeModal();\n resetModalFields();\n };\n\n const resetModalFields = () => {\n setEventTitle(\"\");\n setEventStartDate(\"\");\n setEventEndDate(\"\");\n setEventLevel(\"\");\n setSelectedEvent(null);\n };\n\n return (\n <div className=\"rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]\">\n <div className=\"custom-calendar\">\n <FullCalendar\n ref={calendarRef}\n plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}\n initialView={initialView}\n headerToolbar={{\n left: \"prev,next addEventButton\",\n center: \"title\",\n right: \"dayGridMonth,timeGridWeek,timeGridDay\",\n }}\n events={events}\n selectable={true}\n select={handleDateSelect}\n eventClick={handleEventClick}\n eventContent={renderEventContent}\n customButtons={{\n addEventButton: {\n text: \"Add Event +\",\n click: openModal,\n },\n }}\n />\n </div>\n <Modal\n isOpen={isOpen}\n onClose={closeModal}\n className=\"max-w-[700px] p-6 lg:p-10\"\n >\n <div className=\"flex flex-col px-2 overflow-y-auto custom-scrollbar\">\n <div>\n <h5 className=\"mb-2 font-semibold text-gray-800 modal-title text-theme-xl dark:text-white/90 lg:text-2xl\">\n {selectedEvent ? \"Edit Event\" : \"Add Event\"}\n </h5>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n Plan your next big moment: schedule or edit an event to stay on\n track\n </p>\n </div>\n <div className=\"mt-8\">\n <div>\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Title\n </label>\n <input\n id=\"event-title\"\n type=\"text\"\n value={eventTitle}\n onChange={(e) => setEventTitle(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full rounded-lg border border-gray-300 bg-transparent px-4 py-2.5 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n <div className=\"mt-6\">\n <label className=\"block mb-4 text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Color\n </label>\n <div className=\"flex flex-wrap items-center gap-4 sm:gap-5\">\n {Object.entries(calendarsEvents).map(([key, value]) => (\n <div key={key} className=\"n-chk\">\n <div\n className={`form-check form-check-${value} form-check-inline`}\n >\n <label\n className=\"flex items-center text-sm text-gray-700 form-check-label dark:text-gray-400\"\n htmlFor={`modal${key}`}\n >\n <span className=\"relative\">\n <input\n className=\"sr-only form-check-input\"\n type=\"radio\"\n name=\"event-level\"\n value={key}\n id={`modal${key}`}\n checked={eventLevel === key}\n onChange={() => setEventLevel(key)}\n />\n <span className=\"flex items-center justify-center w-5 h-5 mr-2 border border-gray-300 rounded-full box dark:border-gray-700\">\n <span\n className={`h-2 w-2 rounded-full bg-white ${\n eventLevel === key ? \"block\" : \"hidden\"\n }`}\n ></span>\n </span>\n </span>\n {key}\n </label>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter Start Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-start-date\"\n type=\"date\"\n value={eventStartDate}\n onChange={(e) => setEventStartDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter End Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-end-date\"\n type=\"date\"\n value={eventEndDate}\n onChange={(e) => setEventEndDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3 mt-6 modal-footer sm:justify-end\">\n <button\n onClick={closeModal}\n type=\"button\"\n className=\"flex w-full justify-center rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] sm:w-auto\"\n >\n Close\n </button>\n <button\n onClick={handleAddOrUpdateEvent}\n type=\"button\"\n className=\"btn btn-success btn-update-event flex w-full justify-center rounded-lg bg-brand-500 px-4 py-2.5 text-sm font-medium text-white hover:bg-brand-600 sm:w-auto\"\n >\n {selectedEvent ? \"Update Changes\" : \"Add Event\"}\n </button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n\nconst renderEventContent = (eventInfo: EventContentArg) => {\n const colorClass = `fc-bg-${eventInfo.event.extendedProps.calendar.toLowerCase()}`;\n return (\n <div\n className={`event-fc-color flex fc-event-main ${colorClass} p-1 rounded-sm`}\n >\n <div className=\"fc-daygrid-event-dot\"></div>\n <div className=\"fc-event-time\">{eventInfo.timeText}</div>\n <div className=\"fc-event-title\">{eventInfo.event.title}</div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,152 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var Chart = require('react-apexcharts');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var Chart__default = /*#__PURE__*/_interopDefault(Chart);
10
+
11
+ var defaultOptions = {
12
+ legend: {
13
+ show: false,
14
+ position: "top",
15
+ horizontalAlign: "left"
16
+ },
17
+ colors: ["#465FFF", "#9CB9FF"],
18
+ chart: {
19
+ fontFamily: "Outfit, sans-serif",
20
+ height: 310,
21
+ type: "line",
22
+ toolbar: {
23
+ show: false
24
+ }
25
+ },
26
+ stroke: {
27
+ curve: "straight",
28
+ width: [2, 2]
29
+ },
30
+ fill: {
31
+ type: "gradient",
32
+ gradient: {
33
+ opacityFrom: 0.55,
34
+ opacityTo: 0
35
+ }
36
+ },
37
+ markers: {
38
+ size: 0,
39
+ strokeColors: "#fff",
40
+ strokeWidth: 2,
41
+ hover: {
42
+ size: 6
43
+ }
44
+ },
45
+ grid: {
46
+ xaxis: {
47
+ lines: {
48
+ show: false
49
+ }
50
+ },
51
+ yaxis: {
52
+ lines: {
53
+ show: true
54
+ }
55
+ }
56
+ },
57
+ dataLabels: {
58
+ enabled: false
59
+ },
60
+ tooltip: {
61
+ enabled: true,
62
+ x: {
63
+ format: "dd MMM yyyy"
64
+ }
65
+ },
66
+ xaxis: {
67
+ type: "category",
68
+ categories: [
69
+ "Jan",
70
+ "Feb",
71
+ "Mar",
72
+ "Apr",
73
+ "May",
74
+ "Jun",
75
+ "Jul",
76
+ "Aug",
77
+ "Sep",
78
+ "Oct",
79
+ "Nov",
80
+ "Dec"
81
+ ],
82
+ axisBorder: {
83
+ show: false
84
+ },
85
+ axisTicks: {
86
+ show: false
87
+ },
88
+ tooltip: {
89
+ enabled: false
90
+ }
91
+ },
92
+ yaxis: {
93
+ labels: {
94
+ style: {
95
+ fontSize: "12px",
96
+ colors: ["#6B7280"]
97
+ }
98
+ },
99
+ title: {
100
+ text: "",
101
+ style: {
102
+ fontSize: "0px"
103
+ }
104
+ }
105
+ }
106
+ };
107
+ var defaultSeries = [
108
+ {
109
+ name: "Sales",
110
+ data: [180, 190, 170, 160, 175, 165, 170, 205, 230, 210, 240, 235]
111
+ },
112
+ {
113
+ name: "Revenue",
114
+ data: [40, 30, 50, 40, 55, 40, 70, 100, 110, 120, 150, 140]
115
+ }
116
+ ];
117
+ var LineChart = ({
118
+ series,
119
+ categories,
120
+ colors,
121
+ height,
122
+ options
123
+ }) => {
124
+ const mergedOptions = {
125
+ ...defaultOptions,
126
+ ...options,
127
+ colors: colors ?? options?.colors ?? defaultOptions.colors,
128
+ chart: {
129
+ ...defaultOptions.chart,
130
+ ...options?.chart,
131
+ height: height ?? options?.chart?.height ?? defaultOptions.chart?.height
132
+ },
133
+ xaxis: {
134
+ ...defaultOptions.xaxis,
135
+ ...options?.xaxis,
136
+ categories: categories ?? options?.xaxis?.categories ?? defaultOptions.xaxis?.categories
137
+ }
138
+ };
139
+ return /* @__PURE__ */ jsxRuntime.jsx(
140
+ Chart__default.default,
141
+ {
142
+ options: mergedOptions,
143
+ series: series ?? defaultSeries,
144
+ type: "area",
145
+ height: height ?? 310
146
+ }
147
+ );
148
+ };
149
+
150
+ exports.LineChart = LineChart;
151
+ //# sourceMappingURL=chunk-BGA7AECV.cjs.map
152
+ //# sourceMappingURL=chunk-BGA7AECV.cjs.map