calendarkit-prov2 2.0.0 → 2.0.1

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/index.mjs CHANGED
@@ -4,11 +4,11 @@ import { createPortal } from 'react-dom';
4
4
  import { useDraggable, useSensors, useSensor, PointerSensor, DndContext, DragOverlay, useDroppable } from '@dnd-kit/core';
5
5
  import { createSnapModifier, restrictToWindowEdges } from '@dnd-kit/modifiers';
6
6
  import { motion, AnimatePresence } from 'framer-motion';
7
- import { format, differenceInMinutes, subDays, addDays, differenceInMilliseconds, startOfWeek, endOfWeek, eachDayOfInterval, isSameMonth, isToday, isSameDay, startOfDay, addWeeks, addMonths, subWeeks, subMonths, startOfMonth, endOfMonth, isTomorrow } from 'date-fns';
7
+ import { startOfDay, addDays, endOfDay, startOfWeek, endOfWeek, startOfMonth, endOfMonth, format, differenceInMinutes, subDays, differenceInMilliseconds, eachDayOfInterval, isSameMonth, isToday, isSameDay, addWeeks, addMonths, subWeeks, subMonths, isTomorrow } from 'date-fns';
8
8
  import { cva } from 'class-variance-authority';
9
9
  import { clsx } from 'clsx';
10
10
  import { twMerge } from 'tailwind-merge';
11
- import { Menu, Plus, ChevronLeft, ChevronRight, Globe, ChevronDown, Sun, Moon, CalendarDays, CalendarRange, Calendar, ListTodo, MoreHorizontal, LayoutGrid, X, Clock, Users, Paperclip, Bell, Edit3, Copy, Trash2, Edit2, MapPin, ExternalLink, AlignLeft, File, Download, BellRing, Check, Repeat, Tag } from 'lucide-react';
11
+ import { Menu, Plus, ChevronLeft, ChevronRight, Globe, ChevronDown, Sun, Moon, CalendarCheck2, CalendarDays, CalendarRange, Calendar, ListTodo, MoreHorizontal, LayoutGrid, X, Clock, Users, Paperclip, Bell, Edit3, Copy, Trash2, Edit2, MapPin, ExternalLink, AlignLeft, File, Download, BellRing, Check, Repeat, Tag } from 'lucide-react';
12
12
  import { toZonedTime, fromZonedTime } from 'date-fns-tz';
13
13
  import { CSS } from '@dnd-kit/utilities';
14
14
  import { RRule } from 'rrule';
@@ -1494,7 +1494,9 @@ var CalendarHeader = ({
1494
1494
  onCreateEvent,
1495
1495
  customViews,
1496
1496
  activeCustomViewId,
1497
- onCustomViewChange
1497
+ onCustomViewChange,
1498
+ eventCount,
1499
+ hideLanguageSwitcher = false
1498
1500
  }) => {
1499
1501
  const [isLangOpen, setIsLangOpen] = useState(false);
1500
1502
  const [isCustomViewOpen, setIsCustomViewOpen] = useState(false);
@@ -1586,15 +1588,15 @@ var CalendarHeader = ({
1586
1588
  className: "h-9 px-5 rounded-xl text-sm font-medium hidden sm:inline-flex border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200"
1587
1589
  },
1588
1590
  translations.today
1589
- ), onCreateEvent && /* @__PURE__ */ React15__default.createElement(
1591
+ ), onCreateEvent && /* @__PURE__ */ React15__default.createElement("div", { className: "relative group hidden sm:block" }, /* @__PURE__ */ React15__default.createElement(
1590
1592
  Button,
1591
1593
  {
1592
1594
  onClick: onCreateEvent,
1593
- className: "h-9 px-4 rounded-xl text-sm font-medium hidden sm:inline-flex gap-1.5 shadow-sm shadow-primary/20 transition-all duration-200"
1595
+ size: "icon",
1596
+ className: "h-9 w-9 rounded-xl shadow-sm shadow-primary/20 transition-all duration-200"
1594
1597
  },
1595
- /* @__PURE__ */ React15__default.createElement(Plus, { className: "h-4 w-4" }),
1596
- /* @__PURE__ */ React15__default.createElement("span", null, translations.createEvent ?? translations.create)
1597
- ), /* @__PURE__ */ React15__default.createElement("div", { className: "flex items-center bg-muted/40 rounded-xl p-0.5" }, /* @__PURE__ */ React15__default.createElement(
1598
+ /* @__PURE__ */ React15__default.createElement(Plus, { className: "h-4 w-4" })
1599
+ ), /* @__PURE__ */ React15__default.createElement("div", { className: "pointer-events-none absolute left-1/2 -translate-x-1/2 top-full mt-2 z-50 opacity-0 group-hover:opacity-100 transition-opacity duration-150" }, /* @__PURE__ */ React15__default.createElement("div", { className: "bg-popover text-popover-foreground text-xs font-medium px-2.5 py-1.5 rounded-lg shadow-md border border-border/60 whitespace-nowrap" }, translations.createEvent ?? translations.create), /* @__PURE__ */ React15__default.createElement("div", { className: "absolute -top-1 left-1/2 -translate-x-1/2 w-2 h-2 bg-popover border-l border-t border-border/60 rotate-45" }))), /* @__PURE__ */ React15__default.createElement("div", { className: "flex items-center bg-muted/40 rounded-xl p-0.5" }, /* @__PURE__ */ React15__default.createElement(
1598
1600
  Button,
1599
1601
  {
1600
1602
  variant: "ghost",
@@ -1612,7 +1614,7 @@ var CalendarHeader = ({
1612
1614
  className: "rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200"
1613
1615
  },
1614
1616
  /* @__PURE__ */ React15__default.createElement(ChevronRight, { className: "h-4 w-4 text-muted-foreground" })
1615
- )), /* @__PURE__ */ React15__default.createElement("div", { className: "ml-2 md:ml-4 hidden sm:block" }, /* @__PURE__ */ React15__default.createElement("h2", { className: "text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, format(currentDate, "MMMM yyyy", { locale })))), /* @__PURE__ */ React15__default.createElement("div", { className: "sm:hidden" }, /* @__PURE__ */ React15__default.createElement("h2", { className: "text-lg font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, format(currentDate, "MMMM yyyy", { locale })))), /* @__PURE__ */ React15__default.createElement("div", { className: "flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end" }, onLanguageChange && /* @__PURE__ */ React15__default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__default.createElement(
1617
+ )), /* @__PURE__ */ React15__default.createElement("div", { className: "ml-2 md:ml-4 hidden sm:block" }, /* @__PURE__ */ React15__default.createElement("h2", { className: "text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, format(currentDate, "MMMM yyyy", { locale })))), /* @__PURE__ */ React15__default.createElement("div", { className: "sm:hidden" }, /* @__PURE__ */ React15__default.createElement("h2", { className: "text-lg font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, format(currentDate, "MMMM yyyy", { locale })))), /* @__PURE__ */ React15__default.createElement("div", { className: "flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end" }, onLanguageChange && !hideLanguageSwitcher && /* @__PURE__ */ React15__default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__default.createElement(
1616
1618
  "button",
1617
1619
  {
1618
1620
  ref: langButtonRef,
@@ -1666,6 +1668,14 @@ var CalendarHeader = ({
1666
1668
  onClick: onThemeToggle
1667
1669
  },
1668
1670
  isDarkMode ? /* @__PURE__ */ React15__default.createElement(Sun, { className: "h-4 w-4 text-amber-500" }) : /* @__PURE__ */ React15__default.createElement(Moon, { className: "h-4 w-4 text-muted-foreground" })
1671
+ ), typeof eventCount === "number" && !hideViewSwitcher && /* @__PURE__ */ React15__default.createElement(
1672
+ "div",
1673
+ {
1674
+ className: "flex items-center gap-1.5 h-8 px-3 rounded-xl bg-primary/10 text-primary text-xs font-semibold tabular-nums select-none border border-primary/20 shadow-sm shadow-primary/10",
1675
+ title: `${eventCount} event${eventCount !== 1 ? "s" : ""}`
1676
+ },
1677
+ /* @__PURE__ */ React15__default.createElement(CalendarCheck2, { className: "w-3.5 h-3.5 shrink-0" }),
1678
+ /* @__PURE__ */ React15__default.createElement("span", null, eventCount)
1669
1679
  ), !hideViewSwitcher && /* @__PURE__ */ React15__default.createElement("div", { className: "flex items-center bg-muted/50 backdrop-blur-sm rounded-xl p-1 gap-0.5" }, viewConfig.map(({ key, icon: Icon }) => /* @__PURE__ */ React15__default.createElement(
1670
1680
  Button,
1671
1681
  {
@@ -4119,6 +4129,7 @@ var Scheduler = ({
4119
4129
  onThemeToggle,
4120
4130
  translations,
4121
4131
  hideViewSwitcher,
4132
+ hideLanguageSwitcher,
4122
4133
  initialScrollHour = 8,
4123
4134
  reverseTime: reverseTimeProp = false,
4124
4135
  language = "tr",
@@ -4269,6 +4280,34 @@ var Scheduler = ({
4269
4280
  return activeCalendarIds.includes(e.calendarId);
4270
4281
  });
4271
4282
  }, [expandedEvents, calendars]);
4283
+ const viewEventCount = useMemo(() => {
4284
+ let rangeStart;
4285
+ let rangeEnd;
4286
+ switch (view) {
4287
+ case "month":
4288
+ rangeStart = startOfMonth(currentDate);
4289
+ rangeEnd = endOfMonth(currentDate);
4290
+ break;
4291
+ case "week":
4292
+ rangeStart = startOfWeek(currentDate, { weekStartsOn: 1 });
4293
+ rangeEnd = endOfWeek(currentDate, { weekStartsOn: 1 });
4294
+ break;
4295
+ case "day":
4296
+ case "resource":
4297
+ rangeStart = startOfDay(currentDate);
4298
+ rangeEnd = endOfDay(currentDate);
4299
+ break;
4300
+ case "agenda":
4301
+ rangeStart = startOfDay(currentDate);
4302
+ rangeEnd = addDays(rangeStart, 30);
4303
+ break;
4304
+ default:
4305
+ return filteredEvents.length;
4306
+ }
4307
+ return filteredEvents.filter(
4308
+ (e) => e.start >= rangeStart && e.start <= rangeEnd
4309
+ ).length;
4310
+ }, [filteredEvents, view, currentDate]);
4272
4311
  return /* @__PURE__ */ React15__default.createElement(React15__default.Fragment, null, /* @__PURE__ */ React15__default.createElement(
4273
4312
  DndContext,
4274
4313
  {
@@ -4323,7 +4362,9 @@ var Scheduler = ({
4323
4362
  onCustomViewChange: (id2) => {
4324
4363
  setActiveCustomViewId(id2);
4325
4364
  setActiveCustomMenu(null);
4326
- }
4365
+ },
4366
+ eventCount: viewEventCount,
4367
+ hideLanguageSwitcher
4327
4368
  }
4328
4369
  ),
4329
4370
  /* @__PURE__ */ React15__default.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ React15__default.createElement(