@voyantjs/ui 0.28.1 → 0.29.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/dist/components/async-combobox.d.ts +37 -0
- package/dist/components/async-combobox.d.ts.map +1 -0
- package/dist/components/async-combobox.js +66 -0
- package/dist/components/big-calendar/calendar-view.d.ts +13 -0
- package/dist/components/big-calendar/calendar-view.d.ts.map +1 -0
- package/dist/components/big-calendar/calendar-view.js +51 -0
- package/dist/components/big-calendar/change-badge-variant-input.d.ts +2 -0
- package/dist/components/big-calendar/change-badge-variant-input.d.ts.map +1 -0
- package/dist/components/big-calendar/change-badge-variant-input.js +8 -0
- package/dist/components/big-calendar/context.d.ts +47 -0
- package/dist/components/big-calendar/context.d.ts.map +1 -0
- package/dist/components/big-calendar/context.js +48 -0
- package/dist/components/big-calendar/header/calendar-header.d.ts +12 -0
- package/dist/components/big-calendar/header/calendar-header.d.ts.map +1 -0
- package/dist/components/big-calendar/header/calendar-header.js +34 -0
- package/dist/components/big-calendar/header/date-navigator.d.ts +9 -0
- package/dist/components/big-calendar/header/date-navigator.d.ts.map +1 -0
- package/dist/components/big-calendar/header/date-navigator.js +17 -0
- package/dist/components/big-calendar/header/today-button.d.ts +2 -0
- package/dist/components/big-calendar/header/today-button.d.ts.map +1 -0
- package/dist/components/big-calendar/header/today-button.js +9 -0
- package/dist/components/big-calendar/header/user-select.d.ts +2 -0
- package/dist/components/big-calendar/header/user-select.d.ts.map +1 -0
- package/dist/components/big-calendar/header/user-select.js +10 -0
- package/dist/components/big-calendar/helpers.d.ts +37 -0
- package/dist/components/big-calendar/helpers.d.ts.map +1 -0
- package/dist/components/big-calendar/helpers.js +217 -0
- package/dist/components/big-calendar/index.d.ts +20 -0
- package/dist/components/big-calendar/index.d.ts.map +1 -0
- package/dist/components/big-calendar/index.js +17 -0
- package/dist/components/big-calendar/interfaces.d.ts +21 -0
- package/dist/components/big-calendar/interfaces.d.ts.map +1 -0
- package/dist/components/big-calendar/interfaces.js +1 -0
- package/dist/components/big-calendar/month-view/calendar-month-view.d.ts +10 -0
- package/dist/components/big-calendar/month-view/calendar-month-view.d.ts.map +1 -0
- package/dist/components/big-calendar/month-view/calendar-month-view.js +13 -0
- package/dist/components/big-calendar/month-view/day-cell.d.ts +11 -0
- package/dist/components/big-calendar/month-view/day-cell.d.ts.map +1 -0
- package/dist/components/big-calendar/month-view/day-cell.js +24 -0
- package/dist/components/big-calendar/month-view/event-bullet.d.ts +6 -0
- package/dist/components/big-calendar/month-view/event-bullet.d.ts.map +1 -0
- package/dist/components/big-calendar/month-view/event-bullet.js +22 -0
- package/dist/components/big-calendar/month-view/month-event-badge.d.ts +12 -0
- package/dist/components/big-calendar/month-view/month-event-badge.d.ts.map +1 -0
- package/dist/components/big-calendar/month-view/month-event-badge.js +64 -0
- package/dist/components/big-calendar/types.d.ts +14 -0
- package/dist/components/big-calendar/types.d.ts.map +1 -0
- package/dist/components/big-calendar/types.js +1 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-day-view.d.ts +8 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-day-view.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-day-view.js +49 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-time-line.d.ts +7 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-time-line.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-time-line.js +21 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-week-view.d.ts +8 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-week-view.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/calendar-week-view.js +40 -0
- package/dist/components/big-calendar/week-and-day-view/day-view-multi-day-events-row.d.ts +8 -0
- package/dist/components/big-calendar/week-and-day-view/day-view-multi-day-events-row.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/day-view-multi-day-events-row.js +31 -0
- package/dist/components/big-calendar/week-and-day-view/event-block.d.ts +8 -0
- package/dist/components/big-calendar/week-and-day-view/event-block.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/event-block.js +38 -0
- package/dist/components/big-calendar/week-and-day-view/week-view-multi-day-events-row.d.ts +8 -0
- package/dist/components/big-calendar/week-and-day-view/week-view-multi-day-events-row.d.ts.map +1 -0
- package/dist/components/big-calendar/week-and-day-view/week-view-multi-day-events-row.js +80 -0
- package/dist/components/notification-reminder-rule-dialog.d.ts.map +1 -1
- package/dist/components/notification-reminder-rule-dialog.js +10 -17
- package/dist/components/notification-reminder-rules-page.d.ts +9 -1
- package/dist/components/notification-reminder-rules-page.d.ts.map +1 -1
- package/dist/components/notification-reminder-rules-page.js +7 -17
- package/dist/components/select.d.ts +2 -2
- package/dist/components/select.d.ts.map +1 -1
- package/dist/components/select.js +28 -1
- package/package.json +10 -5
- package/src/styles/globals.css +4 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface AsyncComboboxProps<T> {
|
|
2
|
+
/** Currently selected value (id), or null when nothing is selected. */
|
|
3
|
+
value: string | null;
|
|
4
|
+
/** Fired when the user picks a different option (or clears it). */
|
|
5
|
+
onChange: (value: string | null) => void;
|
|
6
|
+
/** Items currently available to choose from — typically driven by `onSearchChange`. */
|
|
7
|
+
items: readonly T[];
|
|
8
|
+
/** Stable id getter for an item. */
|
|
9
|
+
getKey: (item: T) => string;
|
|
10
|
+
/** Display label for an item (used in the list and as the input label of a selected item). */
|
|
11
|
+
getLabel: (item: T) => string;
|
|
12
|
+
/** Optional secondary label rendered as muted text inside the row (e.g. SKU). */
|
|
13
|
+
getSecondary?: (item: T) => string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Optional currently-selected item. Use this when the upstream `items` list is
|
|
16
|
+
* search-filtered and may not contain the picked one — passing it here keeps
|
|
17
|
+
* the input text stable instead of falling back to the raw key.
|
|
18
|
+
*/
|
|
19
|
+
selectedItem?: T | null;
|
|
20
|
+
/** Called as the user types — wire it to your data fetcher (debouncing is your call). */
|
|
21
|
+
onSearchChange?: (search: string) => void;
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
emptyText?: string;
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
className?: string;
|
|
26
|
+
triggerClassName?: string;
|
|
27
|
+
/** When true, render an "X" clear affordance once a value is selected. */
|
|
28
|
+
clearable?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Async-friendly combobox: typeahead that hands the search string back to the
|
|
32
|
+
* caller so they can refetch a remote list. Items the user has seen are cached
|
|
33
|
+
* locally so labels keep resolving even after the upstream list filters them
|
|
34
|
+
* out (typical when typing narrows the search).
|
|
35
|
+
*/
|
|
36
|
+
export declare function AsyncCombobox<T>({ value, onChange, items, getKey, getLabel, getSecondary, selectedItem, onSearchChange, placeholder, emptyText, disabled, className, triggerClassName, clearable, }: AsyncComboboxProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=async-combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-combobox.d.ts","sourceRoot":"","sources":["../../src/components/async-combobox.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,mEAAmE;IACnE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACxC,uFAAuF;IACvF,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;IACnB,oCAAoC;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IAC3B,8FAA8F;IAC9F,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IAC7B,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9C;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;IACvB,yFAAyF;IACzF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAC/B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAyB,EACzB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,SAAgB,GACjB,EAAE,kBAAkB,CAAC,CAAC,CAAC,2CA8FvB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList, } from "./combobox.js";
|
|
5
|
+
/**
|
|
6
|
+
* Async-friendly combobox: typeahead that hands the search string back to the
|
|
7
|
+
* caller so they can refetch a remote list. Items the user has seen are cached
|
|
8
|
+
* locally so labels keep resolving even after the upstream list filters them
|
|
9
|
+
* out (typical when typing narrows the search).
|
|
10
|
+
*/
|
|
11
|
+
export function AsyncCombobox({ value, onChange, items, getKey, getLabel, getSecondary, selectedItem, onSearchChange, placeholder, emptyText = "No results.", disabled, className, triggerClassName, clearable = true, }) {
|
|
12
|
+
// Cache every item we've ever seen so we can resolve a label for the
|
|
13
|
+
// currently-selected key even after the upstream `items` list has filtered
|
|
14
|
+
// it out (e.g. user picked "Eiffel" then started typing "Notre" — items
|
|
15
|
+
// refetched without Eiffel, but we still need its label in the input).
|
|
16
|
+
const cacheRef = React.useRef(new Map());
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
for (const item of items)
|
|
19
|
+
cacheRef.current.set(getKey(item), item);
|
|
20
|
+
if (selectedItem)
|
|
21
|
+
cacheRef.current.set(getKey(selectedItem), selectedItem);
|
|
22
|
+
}, [items, getKey, selectedItem]);
|
|
23
|
+
const resolveLabel = React.useCallback((key) => {
|
|
24
|
+
if (!key)
|
|
25
|
+
return "";
|
|
26
|
+
const fromItems = items.find((item) => getKey(item) === key);
|
|
27
|
+
if (fromItems)
|
|
28
|
+
return getLabel(fromItems);
|
|
29
|
+
if (selectedItem && getKey(selectedItem) === key)
|
|
30
|
+
return getLabel(selectedItem);
|
|
31
|
+
const cached = cacheRef.current.get(key);
|
|
32
|
+
return cached ? getLabel(cached) : "";
|
|
33
|
+
}, [items, getKey, getLabel, selectedItem]);
|
|
34
|
+
const selectedLabel = resolveLabel(value);
|
|
35
|
+
// The input text mirrors `selectedLabel` whenever a value is set; it's free
|
|
36
|
+
// for typeahead input only when the field is empty.
|
|
37
|
+
const [inputValue, setInputValue] = React.useState(selectedLabel);
|
|
38
|
+
const lastSelectedLabelRef = React.useRef(selectedLabel);
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
if (selectedLabel !== lastSelectedLabelRef.current) {
|
|
41
|
+
setInputValue(selectedLabel);
|
|
42
|
+
lastSelectedLabelRef.current = selectedLabel;
|
|
43
|
+
}
|
|
44
|
+
}, [selectedLabel]);
|
|
45
|
+
const itemKeys = React.useMemo(() => items.map(getKey), [items, getKey]);
|
|
46
|
+
// base-ui uses this to:
|
|
47
|
+
// 1. filter the list as the user types
|
|
48
|
+
// 2. populate the input value when the user picks an item
|
|
49
|
+
// Falling back to the cache (or "") avoids the case where it returned the
|
|
50
|
+
// raw key as the input text.
|
|
51
|
+
const itemToStringLabel = React.useCallback((key) => resolveLabel(typeof key === "string" ? key : null) || key, [resolveLabel]);
|
|
52
|
+
return (_jsxs(Combobox, { items: itemKeys, value: value, inputValue: inputValue, autoHighlight: true, disabled: disabled, itemToStringLabel: itemToStringLabel, itemToStringValue: (key) => key, onInputValueChange: (next) => {
|
|
53
|
+
setInputValue(next);
|
|
54
|
+
onSearchChange?.(next);
|
|
55
|
+
if (!next && value)
|
|
56
|
+
onChange(null);
|
|
57
|
+
}, onValueChange: (next) => {
|
|
58
|
+
const key = next ?? null;
|
|
59
|
+
onChange(key);
|
|
60
|
+
setInputValue(resolveLabel(key));
|
|
61
|
+
}, children: [_jsx(ComboboxInput, { placeholder: placeholder, showClear: clearable && !!value, className: triggerClassName }), _jsxs(ComboboxContent, { className: className, children: [_jsx(ComboboxEmpty, { children: emptyText }), _jsx(ComboboxList, { children: items.map((item) => {
|
|
62
|
+
const key = getKey(item);
|
|
63
|
+
const secondary = getSecondary?.(item);
|
|
64
|
+
return (_jsx(ComboboxItem, { value: key, children: _jsxs("div", { className: "flex min-w-0 flex-1 items-center justify-between gap-2", children: [_jsx("span", { className: "truncate", children: getLabel(item) }), secondary && (_jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: secondary }))] }) }, key));
|
|
65
|
+
}) })] })] }));
|
|
66
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TCalendarView } from "./types.js";
|
|
2
|
+
interface IProps {
|
|
3
|
+
view: TCalendarView;
|
|
4
|
+
onViewChange?: (view: TCalendarView) => void;
|
|
5
|
+
/** Override default switcher set (`day`, `week`, `month`). */
|
|
6
|
+
availableViews?: TCalendarView[];
|
|
7
|
+
/** Forwarded to the month view's day-number button. */
|
|
8
|
+
onDayClick?: (date: Date) => void;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function CalendarView({ view, onViewChange, availableViews, onDayClick, className, }: IProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=calendar-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-view.d.ts","sourceRoot":"","sources":["../../../src/components/big-calendar/calendar-view.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C,UAAU,MAAM;IACd,IAAI,EAAE,aAAa,CAAA;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,8DAA8D;IAC9D,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;IAChC,uDAAuD;IACvD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,GACV,EAAE,MAAM,2CA8FR"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { isSameDay, parseISO } from "date-fns";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { useCalendar } from "./context.js";
|
|
6
|
+
import { CalendarHeader } from "./header/calendar-header.js";
|
|
7
|
+
import { CalendarMonthView } from "./month-view/calendar-month-view.js";
|
|
8
|
+
import { CalendarDayView } from "./week-and-day-view/calendar-day-view.js";
|
|
9
|
+
import { CalendarWeekView } from "./week-and-day-view/calendar-week-view.js";
|
|
10
|
+
export function CalendarView({ view, onViewChange, availableViews, onDayClick, className, }) {
|
|
11
|
+
const { selectedDate, selectedUserId, events } = useCalendar();
|
|
12
|
+
const filteredEvents = React.useMemo(() => {
|
|
13
|
+
return events.filter((event) => {
|
|
14
|
+
const eventStartDate = parseISO(event.startDate);
|
|
15
|
+
const eventEndDate = parseISO(event.endDate);
|
|
16
|
+
const isUserMatch = selectedUserId === "all" || event.user?.id === selectedUserId;
|
|
17
|
+
if (view === "month" || view === "agenda" || view === "year") {
|
|
18
|
+
const monthStart = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);
|
|
19
|
+
const monthEnd = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0, 23, 59, 59, 999);
|
|
20
|
+
return eventStartDate <= monthEnd && eventEndDate >= monthStart && isUserMatch;
|
|
21
|
+
}
|
|
22
|
+
if (view === "week") {
|
|
23
|
+
const dayOfWeek = selectedDate.getDay();
|
|
24
|
+
const weekStart = new Date(selectedDate);
|
|
25
|
+
weekStart.setDate(selectedDate.getDate() - dayOfWeek);
|
|
26
|
+
weekStart.setHours(0, 0, 0, 0);
|
|
27
|
+
const weekEnd = new Date(weekStart);
|
|
28
|
+
weekEnd.setDate(weekStart.getDate() + 6);
|
|
29
|
+
weekEnd.setHours(23, 59, 59, 999);
|
|
30
|
+
return eventStartDate <= weekEnd && eventEndDate >= weekStart && isUserMatch;
|
|
31
|
+
}
|
|
32
|
+
if (view === "day") {
|
|
33
|
+
const dayStart = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 0, 0, 0);
|
|
34
|
+
const dayEnd = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 59, 59);
|
|
35
|
+
return eventStartDate <= dayEnd && eventEndDate >= dayStart && isUserMatch;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
});
|
|
39
|
+
}, [selectedDate, selectedUserId, events, view]);
|
|
40
|
+
const singleDayEvents = filteredEvents.filter((event) => {
|
|
41
|
+
const startDate = parseISO(event.startDate);
|
|
42
|
+
const endDate = parseISO(event.endDate);
|
|
43
|
+
return isSameDay(startDate, endDate);
|
|
44
|
+
});
|
|
45
|
+
const multiDayEvents = filteredEvents.filter((event) => {
|
|
46
|
+
const startDate = parseISO(event.startDate);
|
|
47
|
+
const endDate = parseISO(event.endDate);
|
|
48
|
+
return !isSameDay(startDate, endDate);
|
|
49
|
+
});
|
|
50
|
+
return (_jsxs("div", { className: `overflow-hidden rounded-xl border ${className ?? ""}`.trim(), children: [_jsx(CalendarHeader, { view: view, events: filteredEvents, onViewChange: onViewChange, availableViews: availableViews }), view === "day" ? (_jsx(CalendarDayView, { singleDayEvents: singleDayEvents, multiDayEvents: multiDayEvents })) : null, view === "week" ? (_jsx(CalendarWeekView, { singleDayEvents: singleDayEvents, multiDayEvents: multiDayEvents })) : null, view === "month" ? (_jsx(CalendarMonthView, { singleDayEvents: singleDayEvents, multiDayEvents: multiDayEvents, onDayClick: onDayClick })) : null] }));
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-badge-variant-input.d.ts","sourceRoot":"","sources":["../../../src/components/big-calendar/change-badge-variant-input.tsx"],"names":[],"mappings":"AAOA,wBAAgB,uBAAuB,4CAuBtC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../select.js";
|
|
4
|
+
import { useCalendar } from "./context.js";
|
|
5
|
+
export function ChangeBadgeVariantInput() {
|
|
6
|
+
const { badgeVariant, setBadgeVariant } = useCalendar();
|
|
7
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-semibold", children: "Change badge variant" }), _jsxs(Select, { value: badgeVariant, onValueChange: (value) => setBadgeVariant(value ?? "colored"), children: [_jsx(SelectTrigger, { className: "w-48", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "dot", children: "Dot" }), _jsx(SelectItem, { value: "colored", children: "Colored" }), _jsx(SelectItem, { value: "mixed", children: "Mixed" })] })] })] }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { IEvent, IUser } from "./interfaces.js";
|
|
3
|
+
import type { TBadgeVariant, TVisibleHours, TWorkingHours } from "./types.js";
|
|
4
|
+
interface ICalendarContext {
|
|
5
|
+
selectedDate: Date;
|
|
6
|
+
setSelectedDate: (date: Date | undefined) => void;
|
|
7
|
+
selectedUserId: IUser["id"] | "all";
|
|
8
|
+
setSelectedUserId: (userId: IUser["id"] | "all") => void;
|
|
9
|
+
badgeVariant: TBadgeVariant;
|
|
10
|
+
setBadgeVariant: (variant: TBadgeVariant) => void;
|
|
11
|
+
users: IUser[];
|
|
12
|
+
workingHours: TWorkingHours;
|
|
13
|
+
setWorkingHours: React.Dispatch<React.SetStateAction<TWorkingHours>>;
|
|
14
|
+
visibleHours: TVisibleHours;
|
|
15
|
+
setVisibleHours: React.Dispatch<React.SetStateAction<TVisibleHours>>;
|
|
16
|
+
events: IEvent[];
|
|
17
|
+
/** Optional click handler — wires badges and event blocks to consumer routing/dialogs. */
|
|
18
|
+
onEventClick?: (event: IEvent) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Optional add-event handler — wires the "Add" button in week/day grids and
|
|
21
|
+
* the calendar header. When omitted, the inline add affordances are hidden.
|
|
22
|
+
*/
|
|
23
|
+
onAddEvent?: (args: {
|
|
24
|
+
date: Date;
|
|
25
|
+
hour?: number;
|
|
26
|
+
minute?: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
}
|
|
29
|
+
interface CalendarProviderProps {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
events: IEvent[];
|
|
32
|
+
users?: IUser[];
|
|
33
|
+
defaultSelectedDate?: Date;
|
|
34
|
+
defaultBadgeVariant?: TBadgeVariant;
|
|
35
|
+
defaultWorkingHours?: TWorkingHours;
|
|
36
|
+
defaultVisibleHours?: TVisibleHours;
|
|
37
|
+
onEventClick?: (event: IEvent) => void;
|
|
38
|
+
onAddEvent?: (args: {
|
|
39
|
+
date: Date;
|
|
40
|
+
hour?: number;
|
|
41
|
+
minute?: number;
|
|
42
|
+
}) => void;
|
|
43
|
+
}
|
|
44
|
+
export declare function CalendarProvider({ children, events, users, defaultSelectedDate, defaultBadgeVariant, defaultWorkingHours, defaultVisibleHours, onEventClick, onAddEvent, }: CalendarProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare function useCalendar(): ICalendarContext;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/big-calendar/context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE7E,UAAU,gBAAgB;IACxB,YAAY,EAAE,IAAI,CAAA;IAClB,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAA;IACjD,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;IACnC,iBAAiB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,CAAA;IACxD,YAAY,EAAE,aAAa,CAAA;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IACjD,KAAK,EAAE,KAAK,EAAE,CAAA;IACd,YAAY,EAAE,aAAa,CAAA;IAC3B,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;IACpE,YAAY,EAAE,aAAa,CAAA;IAC3B,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;IACpE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAC5E;AAgBD,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;IACf,mBAAmB,CAAC,EAAE,IAAI,CAAA;IAC1B,mBAAmB,CAAC,EAAE,aAAa,CAAA;IACnC,mBAAmB,CAAC,EAAE,aAAa,CAAA;IACnC,mBAAmB,CAAC,EAAE,aAAa,CAAA;IACnC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAC5E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,KAAU,EACV,mBAAmB,EACnB,mBAA+B,EAC/B,mBAA2C,EAC3C,mBAA2C,EAC3C,YAAY,EACZ,UAAU,GACX,EAAE,qBAAqB,2CAmCvB;AAED,wBAAgB,WAAW,IAAI,gBAAgB,CAI9C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
const CalendarContext = React.createContext(null);
|
|
5
|
+
const DEFAULT_WORKING_HOURS = {
|
|
6
|
+
0: { from: 0, to: 0 },
|
|
7
|
+
1: { from: 8, to: 17 },
|
|
8
|
+
2: { from: 8, to: 17 },
|
|
9
|
+
3: { from: 8, to: 17 },
|
|
10
|
+
4: { from: 8, to: 17 },
|
|
11
|
+
5: { from: 8, to: 17 },
|
|
12
|
+
6: { from: 8, to: 12 },
|
|
13
|
+
};
|
|
14
|
+
const DEFAULT_VISIBLE_HOURS = { from: 7, to: 18 };
|
|
15
|
+
export function CalendarProvider({ children, events, users = [], defaultSelectedDate, defaultBadgeVariant = "colored", defaultWorkingHours = DEFAULT_WORKING_HOURS, defaultVisibleHours = DEFAULT_VISIBLE_HOURS, onEventClick, onAddEvent, }) {
|
|
16
|
+
const [badgeVariant, setBadgeVariant] = React.useState(defaultBadgeVariant);
|
|
17
|
+
const [visibleHours, setVisibleHours] = React.useState(defaultVisibleHours);
|
|
18
|
+
const [workingHours, setWorkingHours] = React.useState(defaultWorkingHours);
|
|
19
|
+
const [selectedDate, setSelectedDate] = React.useState(() => defaultSelectedDate ?? new Date());
|
|
20
|
+
const [selectedUserId, setSelectedUserId] = React.useState("all");
|
|
21
|
+
const handleSelectDate = (date) => {
|
|
22
|
+
if (!date)
|
|
23
|
+
return;
|
|
24
|
+
setSelectedDate(date);
|
|
25
|
+
};
|
|
26
|
+
return (_jsx(CalendarContext.Provider, { value: {
|
|
27
|
+
selectedDate,
|
|
28
|
+
setSelectedDate: handleSelectDate,
|
|
29
|
+
selectedUserId,
|
|
30
|
+
setSelectedUserId,
|
|
31
|
+
badgeVariant,
|
|
32
|
+
setBadgeVariant,
|
|
33
|
+
users,
|
|
34
|
+
visibleHours,
|
|
35
|
+
setVisibleHours,
|
|
36
|
+
workingHours,
|
|
37
|
+
setWorkingHours,
|
|
38
|
+
events,
|
|
39
|
+
onEventClick,
|
|
40
|
+
onAddEvent,
|
|
41
|
+
}, children: children }));
|
|
42
|
+
}
|
|
43
|
+
export function useCalendar() {
|
|
44
|
+
const context = React.useContext(CalendarContext);
|
|
45
|
+
if (!context)
|
|
46
|
+
throw new Error("useCalendar must be used within a CalendarProvider.");
|
|
47
|
+
return context;
|
|
48
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IEvent } from "../interfaces.js";
|
|
2
|
+
import type { TCalendarView } from "../types.js";
|
|
3
|
+
interface IProps {
|
|
4
|
+
view: TCalendarView;
|
|
5
|
+
events: IEvent[];
|
|
6
|
+
onViewChange?: (view: TCalendarView) => void;
|
|
7
|
+
/** Which views to expose in the switcher. Defaults to day/week/month. */
|
|
8
|
+
availableViews?: TCalendarView[];
|
|
9
|
+
}
|
|
10
|
+
export declare function CalendarHeader({ view, events, onViewChange, availableViews, }: IProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=calendar-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-header.d.ts","sourceRoot":"","sources":["../../../../src/components/big-calendar/header/calendar-header.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,UAAU,MAAM;IACd,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,yEAAyE;IACzE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;CACjC;AAkBD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,cAAyC,GAC1C,EAAE,MAAM,2CAmDR"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CalendarRange, Columns, Grid2x2, Grid3x3, List, Plus } from "lucide-react";
|
|
3
|
+
import { Button } from "../../button.js";
|
|
4
|
+
import { useCalendar } from "../context.js";
|
|
5
|
+
import { DateNavigator } from "./date-navigator.js";
|
|
6
|
+
import { TodayButton } from "./today-button.js";
|
|
7
|
+
import { UserSelect } from "./user-select.js";
|
|
8
|
+
const VIEW_ICONS = {
|
|
9
|
+
day: List,
|
|
10
|
+
week: Columns,
|
|
11
|
+
month: Grid2x2,
|
|
12
|
+
year: Grid3x3,
|
|
13
|
+
agenda: CalendarRange,
|
|
14
|
+
};
|
|
15
|
+
const VIEW_LABELS = {
|
|
16
|
+
day: "View by day",
|
|
17
|
+
week: "View by week",
|
|
18
|
+
month: "View by month",
|
|
19
|
+
year: "View by year",
|
|
20
|
+
agenda: "View by agenda",
|
|
21
|
+
};
|
|
22
|
+
export function CalendarHeader({ view, events, onViewChange, availableViews = ["day", "week", "month"], }) {
|
|
23
|
+
const { selectedDate, onAddEvent } = useCalendar();
|
|
24
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 border-b p-4 lg:flex-row lg:items-center lg:justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(TodayButton, {}), _jsx(DateNavigator, { view: view, events: events })] }), _jsxs("div", { className: "flex flex-col items-center gap-1.5 sm:flex-row sm:justify-between", children: [_jsxs("div", { className: "flex w-full items-center gap-1.5", children: [_jsx("div", { className: "inline-flex first:rounded-r-none last:rounded-l-none [&:not(:first-child):not(:last-child)]:rounded-none", children: availableViews.map((target, index) => {
|
|
25
|
+
const Icon = VIEW_ICONS[target];
|
|
26
|
+
const isFirst = index === 0;
|
|
27
|
+
const isLast = index === availableViews.length - 1;
|
|
28
|
+
return (_jsx(Button, { type: "button", "aria-label": VIEW_LABELS[target], size: "icon", variant: view === target ? "default" : "outline", className: isFirst
|
|
29
|
+
? "rounded-r-none [&_svg]:size-5"
|
|
30
|
+
: isLast
|
|
31
|
+
? "-ml-px rounded-l-none [&_svg]:size-5"
|
|
32
|
+
: "-ml-px rounded-none [&_svg]:size-5", onClick: () => onViewChange?.(target), children: _jsx(Icon, { strokeWidth: 1.8 }) }, target));
|
|
33
|
+
}) }), _jsx(UserSelect, {})] }), onAddEvent ? (_jsxs(Button, { className: "w-full sm:w-auto", onClick: () => onAddEvent({ date: selectedDate }), children: [_jsx(Plus, {}), "Add Event"] })) : null] })] }));
|
|
34
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IEvent } from "../interfaces.js";
|
|
2
|
+
import type { TCalendarView } from "../types.js";
|
|
3
|
+
interface IProps {
|
|
4
|
+
view: TCalendarView;
|
|
5
|
+
events: IEvent[];
|
|
6
|
+
}
|
|
7
|
+
export declare function DateNavigator({ view, events }: IProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=date-navigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-navigator.d.ts","sourceRoot":"","sources":["../../../../src/components/big-calendar/header/date-navigator.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,UAAU,MAAM;IACd,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,2CA0CrD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { format } from "date-fns";
|
|
3
|
+
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { Badge } from "../../badge.js";
|
|
6
|
+
import { Button } from "../../button.js";
|
|
7
|
+
import { useCalendar } from "../context.js";
|
|
8
|
+
import { getEventsCount, navigateDate, rangeText } from "../helpers.js";
|
|
9
|
+
export function DateNavigator({ view, events }) {
|
|
10
|
+
const { selectedDate, setSelectedDate } = useCalendar();
|
|
11
|
+
const month = format(selectedDate, "MMMM");
|
|
12
|
+
const year = selectedDate.getFullYear();
|
|
13
|
+
const eventCount = React.useMemo(() => getEventsCount(events, selectedDate, view), [events, selectedDate, view]);
|
|
14
|
+
const handlePrevious = () => setSelectedDate(navigateDate(selectedDate, view, "previous"));
|
|
15
|
+
const handleNext = () => setSelectedDate(navigateDate(selectedDate, view, "next"));
|
|
16
|
+
return (_jsxs("div", { className: "space-y-0.5", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { className: "text-lg font-semibold", children: [month, " ", year] }), _jsxs(Badge, { variant: "outline", className: "px-1.5", children: [eventCount, " events"] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", className: "size-6.5 px-0 [&_svg]:size-4.5", onClick: handlePrevious, children: _jsx(ChevronLeft, {}) }), _jsx("p", { className: "text-sm text-muted-foreground", children: rangeText(view, selectedDate) }), _jsx(Button, { variant: "outline", className: "size-6.5 px-0 [&_svg]:size-4.5", onClick: handleNext, children: _jsx(ChevronRight, {}) })] })] }));
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"today-button.d.ts","sourceRoot":"","sources":["../../../../src/components/big-calendar/header/today-button.tsx"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,4CAkB1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { format } from "date-fns";
|
|
3
|
+
import { useCalendar } from "../context.js";
|
|
4
|
+
export function TodayButton() {
|
|
5
|
+
const { setSelectedDate } = useCalendar();
|
|
6
|
+
const today = new Date();
|
|
7
|
+
const handleClick = () => setSelectedDate(today);
|
|
8
|
+
return (_jsxs("button", { type: "button", className: "flex size-14 flex-col items-start overflow-hidden rounded-lg border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", onClick: handleClick, children: [_jsx("p", { className: "flex h-6 w-full items-center justify-center bg-primary text-center text-xs font-semibold text-primary-foreground", children: format(today, "MMM").toUpperCase() }), _jsx("p", { className: "flex w-full items-center justify-center text-lg font-bold", children: today.getDate() })] }));
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-select.d.ts","sourceRoot":"","sources":["../../../../src/components/big-calendar/header/user-select.tsx"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,mDAyCzB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, AvatarFallback, AvatarGroup, AvatarImage } from "../../avatar.js";
|
|
3
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../select.js";
|
|
4
|
+
import { useCalendar } from "../context.js";
|
|
5
|
+
export function UserSelect() {
|
|
6
|
+
const { users, selectedUserId, setSelectedUserId } = useCalendar();
|
|
7
|
+
if (users.length === 0)
|
|
8
|
+
return null;
|
|
9
|
+
return (_jsxs(Select, { value: selectedUserId, onValueChange: (value) => setSelectedUserId(value ?? "all"), children: [_jsx(SelectTrigger, { className: "flex-1 md:w-48", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { align: "end", children: [_jsx(SelectItem, { value: "all", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(AvatarGroup, { children: users.slice(0, 2).map((user) => (_jsxs(Avatar, { className: "size-6", children: [_jsx(AvatarImage, { src: user.picturePath ?? undefined, alt: user.name }), _jsx(AvatarFallback, { children: user.name[0] })] }, user.id))) }), "All"] }) }), users.map((user) => (_jsx(SelectItem, { value: user.id, className: "flex-1", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Avatar, { className: "size-6", children: [_jsx(AvatarImage, { src: user.picturePath ?? undefined, alt: user.name }), _jsx(AvatarFallback, { children: user.name[0] })] }), _jsx("p", { className: "truncate", children: user.name })] }) }, user.id)))] })] }));
|
|
10
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ICalendarCell, IEvent } from "./interfaces.js";
|
|
2
|
+
import type { TCalendarView, TVisibleHours, TWorkingHours } from "./types.js";
|
|
3
|
+
export declare function rangeText(view: TCalendarView, date: Date): string;
|
|
4
|
+
export declare function navigateDate(date: Date, view: TCalendarView, direction: "previous" | "next"): Date;
|
|
5
|
+
export declare function getEventsCount(events: IEvent[], date: Date, view: TCalendarView): number;
|
|
6
|
+
export declare function getCurrentEvents(events: IEvent[]): IEvent[];
|
|
7
|
+
export declare function groupEvents(dayEvents: IEvent[]): IEvent[][];
|
|
8
|
+
export declare function getEventBlockStyle(event: IEvent, day: Date, groupIndex: number, groupSize: number, visibleHoursRange?: {
|
|
9
|
+
from: number;
|
|
10
|
+
to: number;
|
|
11
|
+
}): {
|
|
12
|
+
top: string;
|
|
13
|
+
width: string;
|
|
14
|
+
left: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function isWorkingHour(day: Date, hour: number, workingHours: TWorkingHours): boolean;
|
|
17
|
+
export declare function getVisibleHours(visibleHours: TVisibleHours, singleDayEvents: IEvent[]): {
|
|
18
|
+
hours: number[];
|
|
19
|
+
earliestEventHour: number;
|
|
20
|
+
latestEventHour: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function getCalendarCells(selectedDate: Date): ICalendarCell[];
|
|
23
|
+
export declare function calculateMonthEventPositions(multiDayEvents: IEvent[], singleDayEvents: IEvent[], selectedDate: Date): {
|
|
24
|
+
[key: string]: number;
|
|
25
|
+
};
|
|
26
|
+
export declare function getMonthCellEvents(date: Date, events: IEvent[], eventPositions: Record<string, number>): {
|
|
27
|
+
position: number;
|
|
28
|
+
isMultiDay: boolean;
|
|
29
|
+
id: string;
|
|
30
|
+
startDate: string;
|
|
31
|
+
endDate: string;
|
|
32
|
+
title: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
color: import("./types.js").TEventColor;
|
|
35
|
+
user?: import("./interfaces.js").IUser;
|
|
36
|
+
}[];
|
|
37
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/big-calendar/helpers.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,UA6BxD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,UAAU,GAAG,MAAM,GAC7B,IAAI,CAUN;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAUxF;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAUhD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,cA0B9C;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,IAAI,EACT,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;;;;EAuBjD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,WAKjF;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE;;;;EAoBrF;AAID,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,IAAI,GAAG,aAAa,EAAE,CA+BpE;AAED,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EAAE,EACxB,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,IAAI;;EA0DnB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EAAE,EAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;IAuBvC"}
|