nuxt-ui-elements-pro 0.1.4 → 0.1.6
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/module.json +1 -1
- package/dist/module.mjs +50 -15
- package/dist/runtime/components/EventCalendar.d.vue.ts +48 -42
- package/dist/runtime/components/EventCalendar.vue +116 -606
- package/dist/runtime/components/EventCalendar.vue.d.ts +48 -42
- package/dist/runtime/components/EventCalendarHeader.d.vue.ts +26 -0
- package/dist/runtime/components/EventCalendarHeader.vue +48 -0
- package/dist/runtime/components/EventCalendarHeader.vue.d.ts +26 -0
- package/dist/runtime/components/EventCalendarListView.d.vue.ts +25 -0
- package/dist/runtime/components/EventCalendarListView.vue +95 -0
- package/dist/runtime/components/EventCalendarListView.vue.d.ts +25 -0
- package/dist/runtime/components/EventCalendarMonthView.d.vue.ts +34 -0
- package/dist/runtime/components/EventCalendarMonthView.vue +336 -0
- package/dist/runtime/components/EventCalendarMonthView.vue.d.ts +34 -0
- package/dist/runtime/components/EventCalendarTimeGrid.d.vue.ts +31 -0
- package/dist/runtime/components/EventCalendarTimeGrid.vue +306 -0
- package/dist/runtime/components/EventCalendarTimeGrid.vue.d.ts +31 -0
- package/dist/runtime/composables/useEventCalendar.d.ts +52 -0
- package/dist/runtime/composables/useEventCalendar.js +362 -0
- package/dist/runtime/composables/useEventCalendarContext.d.ts +8 -0
- package/dist/runtime/composables/useEventCalendarContext.js +11 -0
- package/dist/runtime/composables/useEventCalendarDragDrop.d.ts +1 -1
- package/dist/runtime/composables/useEventCalendarDragDrop.js +11 -9
- package/dist/runtime/composables/useEventCalendarKeyboard.d.ts +20 -0
- package/dist/runtime/composables/useEventCalendarKeyboard.js +128 -0
- package/dist/runtime/composables/useEventCalendarResize.d.ts +31 -0
- package/dist/runtime/composables/useEventCalendarResize.js +87 -0
- package/dist/runtime/composables/useEventCalendarSelect.d.ts +21 -0
- package/dist/runtime/composables/useEventCalendarSelect.js +119 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/types/event-calendar.d.ts +169 -0
- package/dist/runtime/types/index.d.ts +4 -0
- package/dist/runtime/types/index.js +4 -0
- package/dist/runtime/utils/event-calendar.d.ts +22 -1
- package/dist/runtime/utils/event-calendar.js +199 -1
- package/dist/runtime/utils/recurrence.d.ts +30 -0
- package/dist/runtime/utils/recurrence.js +150 -0
- package/package.json +15 -6
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { ofetch } from 'ofetch';
|
|
|
5
5
|
const eventCalendar = (options) => ({
|
|
6
6
|
slots: {
|
|
7
7
|
// Shared
|
|
8
|
-
root: "w-full border border-default rounded-lg bg-default",
|
|
8
|
+
root: "w-full border border-default rounded-lg bg-default flex flex-col overflow-hidden",
|
|
9
9
|
header: "flex items-center justify-between px-4 py-3 border-b border-default",
|
|
10
10
|
headerTitle: "text-lg font-semibold text-highlighted",
|
|
11
11
|
headerActions: "flex items-center gap-1",
|
|
@@ -13,45 +13,78 @@ const eventCalendar = (options) => ({
|
|
|
13
13
|
// Month view
|
|
14
14
|
weekdayRow: "grid grid-cols-7 border-b border-default",
|
|
15
15
|
weekdayCell: "py-2 text-center text-xs font-medium text-muted uppercase tracking-wider",
|
|
16
|
-
monthBody: "
|
|
17
|
-
|
|
16
|
+
monthBody: "flex flex-col select-none",
|
|
17
|
+
monthWeekRow: "",
|
|
18
|
+
dayCell: "border-b border-r border-default hover:bg-elevated/50 cursor-pointer",
|
|
18
19
|
dayCellOutside: "bg-muted/20",
|
|
20
|
+
monthDayNumber: "relative z-[1] p-1",
|
|
19
21
|
dayNumber: "text-xs font-medium p-1 leading-none",
|
|
20
22
|
dayNumberToday: "inline-flex items-center justify-center size-6 rounded-full text-inverted font-semibold",
|
|
21
23
|
dayNumberOutside: "text-muted",
|
|
22
24
|
eventList: "space-y-1 mt-1",
|
|
25
|
+
spanningEventChip: [
|
|
26
|
+
"relative z-[2] flex items-center text-xs px-1.5 truncate cursor-pointer",
|
|
27
|
+
"text-[var(--event-color)]"
|
|
28
|
+
],
|
|
23
29
|
eventChip: [
|
|
24
|
-
"text-xs px-1.5 py-
|
|
30
|
+
"relative z-[2] flex items-center gap-1 text-xs px-1.5 py-0.5 rounded truncate cursor-pointer mx-0.5",
|
|
25
31
|
"border-l-2 text-[var(--event-color)] border-[var(--event-color)]"
|
|
26
32
|
],
|
|
27
33
|
eventTime: "font-medium mr-1",
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
recurringIcon: "size-3 shrink-0 opacity-60 align-middle mr-0.5",
|
|
35
|
+
moreEvents: "relative z-[2] text-xs text-muted px-1.5 py-0.5 cursor-pointer hover:text-highlighted",
|
|
36
|
+
expandedOverlay: "bg-default border border-default rounded-lg p-1.5 shadow-xl z-20 animate-expand-overlay",
|
|
30
37
|
// Week/Day view
|
|
31
|
-
|
|
38
|
+
timeGridRoot: "flex-1 flex flex-col min-h-0 overflow-hidden",
|
|
39
|
+
columnHeaders: "flex border-b border-default shrink-0",
|
|
32
40
|
timeGutterSpacer: "w-16 shrink-0 border-r border-default",
|
|
33
41
|
dayColumnHeader: "flex-1 bg-default py-2 text-center border-r border-default last:border-r-0",
|
|
34
42
|
dayColumnHeaderLabel: "text-xs font-medium text-muted uppercase",
|
|
35
43
|
dayColumnHeaderNumber: "text-lg font-semibold text-highlighted",
|
|
36
44
|
dayColumnHeaderToday: "inline-flex items-center justify-center size-8 rounded-full text-inverted font-semibold",
|
|
37
|
-
allDayRow: "flex border-b border-default min-h-8",
|
|
45
|
+
allDayRow: "flex border-b border-default min-h-8 shrink-0",
|
|
38
46
|
allDayLabel: "w-16 shrink-0 border-r border-default flex items-center justify-end pr-2 text-[10px] text-muted",
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
allDayGrid: "flex-1 relative",
|
|
48
|
+
allDayCell: "border-r border-default last:border-r-0",
|
|
49
|
+
allDaySpanningChip: [
|
|
50
|
+
"relative z-[2] flex items-center text-xs px-1.5 truncate cursor-pointer",
|
|
51
|
+
"text-[var(--event-color)]"
|
|
52
|
+
],
|
|
53
|
+
timeGrid: "relative flex items-start flex-1 min-h-0 overflow-auto select-none",
|
|
41
54
|
timeGutter: "sticky left-0 z-10 w-16 shrink-0 bg-default border-r border-default",
|
|
42
55
|
timeGutterSlot: "relative border-b border-default/50",
|
|
43
56
|
timeLabel: "absolute top-0 right-0 px-2 mr-2 text-[10px] text-muted -translate-y-1/2 bg-default",
|
|
44
57
|
dayColumn: "flex-1 relative border-r border-default last:border-r-0",
|
|
45
58
|
timeSlotRow: "border-b border-default/50 transition-colors",
|
|
46
59
|
timeEvent: [
|
|
47
|
-
"absolute rounded px-1.5 py-0.5 text-xs cursor-pointer overflow-hidden",
|
|
60
|
+
"absolute rounded px-1.5 py-0.5 text-xs cursor-pointer overflow-hidden group",
|
|
48
61
|
"border-l-2 text-[var(--event-color)] border-[var(--event-color)]"
|
|
49
62
|
],
|
|
50
|
-
timeEventTitle: "font-medium truncate",
|
|
63
|
+
timeEventTitle: "font-medium truncate flex items-center gap-1",
|
|
51
64
|
timeEventTime: "opacity-70 text-[10px]",
|
|
65
|
+
resizeHandle: "absolute bottom-0 left-0 right-0 h-2 cursor-s-resize flex items-center justify-center",
|
|
66
|
+
resizeHandleBar: "w-8 h-0.5 rounded-full bg-current opacity-0 group-hover:opacity-40 transition-opacity",
|
|
67
|
+
// List/agenda view
|
|
68
|
+
listBody: "divide-y divide-default",
|
|
69
|
+
listDateHeader: "flex items-center gap-3 px-4 py-2.5 bg-elevated/50 sticky top-0",
|
|
70
|
+
listDateWeekday: "text-sm font-semibold text-highlighted",
|
|
71
|
+
listDateLabel: "text-sm text-muted",
|
|
72
|
+
listEventRow: "flex items-center gap-3 px-4 py-2.5 hover:bg-elevated/50 cursor-pointer transition-colors",
|
|
73
|
+
listEventTime: "w-28 shrink-0 text-xs text-muted text-right",
|
|
74
|
+
listEventDot: "size-2.5 shrink-0 rounded-full",
|
|
75
|
+
listEventTitle: "text-sm text-highlighted truncate",
|
|
76
|
+
listEmpty: "px-4 py-8 text-center text-sm text-muted",
|
|
52
77
|
// Drag state
|
|
53
78
|
dropTarget: "ring-2 ring-dashed ring-offset-1",
|
|
54
|
-
dragSnapSlot: ""
|
|
79
|
+
dragSnapSlot: "",
|
|
80
|
+
// Selection
|
|
81
|
+
selectionOverlay: "",
|
|
82
|
+
// Loading & empty states
|
|
83
|
+
loadingOverlay: "absolute inset-0 z-30 flex items-center justify-center bg-default/60",
|
|
84
|
+
loadingIcon: "size-8 text-muted animate-spin",
|
|
85
|
+
emptyState: "flex flex-col items-center justify-center gap-2 py-14 text-center",
|
|
86
|
+
emptyStateIcon: "size-10 text-muted/50",
|
|
87
|
+
emptyStateText: "text-sm text-muted"
|
|
55
88
|
},
|
|
56
89
|
variants: {
|
|
57
90
|
color: {
|
|
@@ -66,7 +99,8 @@ const eventCalendar = (options) => ({
|
|
|
66
99
|
dayNumberToday: `bg-${color}`,
|
|
67
100
|
dayColumnHeaderToday: `bg-${color}`,
|
|
68
101
|
dropTarget: `ring-${color}`,
|
|
69
|
-
dragSnapSlot: `bg-${color}/10 ring-1 ring-inset ring-${color}/30
|
|
102
|
+
dragSnapSlot: `bg-${color}/10 ring-1 ring-inset ring-${color}/30`,
|
|
103
|
+
selectionOverlay: `bg-${color}/10`
|
|
70
104
|
}
|
|
71
105
|
})),
|
|
72
106
|
{
|
|
@@ -75,7 +109,8 @@ const eventCalendar = (options) => ({
|
|
|
75
109
|
dayNumberToday: "bg-inverted",
|
|
76
110
|
dayColumnHeaderToday: "bg-inverted",
|
|
77
111
|
dropTarget: "ring-inverted",
|
|
78
|
-
dragSnapSlot: "bg-inverted/10 ring-1 ring-inset ring-inverted/30"
|
|
112
|
+
dragSnapSlot: "bg-inverted/10 ring-1 ring-inset ring-inverted/30",
|
|
113
|
+
selectionOverlay: "bg-inverted/10"
|
|
79
114
|
}
|
|
80
115
|
}
|
|
81
116
|
],
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import type { CalendarDate, DateValue } from "@internationalized/date";
|
|
2
2
|
import type { AppConfig } from "@nuxt/schema";
|
|
3
|
-
import theme from "#build/ui-elements-pro/event-calendar";
|
|
4
3
|
import type { ComponentConfig } from "nuxt-ui-elements";
|
|
5
|
-
import type { CalendarEvent,
|
|
4
|
+
import type { CalendarEvent, CalendarView, MonthViewOptions, WeekViewOptions, DayViewOptions, EventDropPayload, EventResizePayload, SelectPayload, EventCalendarContext } from "../types/event-calendar.js";
|
|
5
|
+
import { type Component } from "vue";
|
|
6
|
+
import theme from "#build/ui-elements-pro/event-calendar";
|
|
6
7
|
type EventCalendar = ComponentConfig<typeof theme, AppConfig, "eventCalendar">;
|
|
7
8
|
export interface EventCalendarProps {
|
|
9
|
+
/** Rendered element type @defaultValue 'div' */
|
|
10
|
+
as?: string | Component;
|
|
8
11
|
/** Array of events to display */
|
|
9
12
|
events?: CalendarEvent[];
|
|
10
13
|
/** Currently displayed date. Controls which month/week/day is shown. Supports v-model. */
|
|
11
14
|
modelValue?: Date | string | DateValue;
|
|
12
15
|
/** Calendar view mode @defaultValue 'month' */
|
|
13
|
-
view?:
|
|
16
|
+
view?: CalendarView;
|
|
14
17
|
/** Locale for day/month names @defaultValue 'en-US' */
|
|
15
18
|
locale?: string;
|
|
16
|
-
/** Day the week starts on @defaultValue 0 */
|
|
17
|
-
weekStartsOn?: 0 | 1;
|
|
19
|
+
/** Day the week starts on (0=Sun, 1=Mon, … 6=Sat) @defaultValue 0 */
|
|
20
|
+
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
18
21
|
/** Enable drag-and-drop globally @defaultValue true */
|
|
19
22
|
editable?: boolean;
|
|
23
|
+
/** Show loading overlay @defaultValue false */
|
|
24
|
+
loading?: boolean;
|
|
25
|
+
/** Enable click/drag date range selection @defaultValue true */
|
|
26
|
+
selectable?: boolean;
|
|
20
27
|
/** Theme color for calendar chrome @defaultValue 'primary' */
|
|
21
28
|
color?: EventCalendar["variants"]["color"];
|
|
22
29
|
/** Month view options */
|
|
@@ -32,64 +39,63 @@ export interface EventCalendarEmits {
|
|
|
32
39
|
/** Fires when the displayed date changes */
|
|
33
40
|
"update:modelValue": [value: CalendarDate];
|
|
34
41
|
/** Fires when the view changes */
|
|
35
|
-
"update:view": [value:
|
|
42
|
+
"update:view": [value: CalendarView];
|
|
36
43
|
/** Fires when a date cell is clicked */
|
|
37
44
|
dateClick: [date: CalendarDate];
|
|
38
45
|
/** Fires when an event is clicked */
|
|
39
46
|
eventClick: [event: CalendarEvent];
|
|
40
47
|
/** Fires after drag-and-drop */
|
|
41
48
|
eventDrop: [payload: EventDropPayload];
|
|
49
|
+
/** Fires after resize */
|
|
50
|
+
eventResize: [payload: EventResizePayload];
|
|
51
|
+
/** Fires when resize starts */
|
|
52
|
+
eventResizeStart: [payload: {
|
|
53
|
+
event: CalendarEvent;
|
|
54
|
+
}];
|
|
55
|
+
/** Fires when resize ends */
|
|
56
|
+
eventResizeEnd: [payload: {
|
|
57
|
+
event: CalendarEvent;
|
|
58
|
+
}];
|
|
59
|
+
/** Fires after a click or drag date range selection */
|
|
60
|
+
select: [payload: SelectPayload];
|
|
42
61
|
}
|
|
43
62
|
export interface EventCalendarSlots {
|
|
44
|
-
|
|
45
|
-
title: string;
|
|
46
|
-
prev: () => void;
|
|
47
|
-
next: () => void;
|
|
48
|
-
today: () => void;
|
|
49
|
-
currentDate: CalendarDate;
|
|
50
|
-
view: "month" | "week" | "day";
|
|
51
|
-
setView: (v: "month" | "week" | "day") => void;
|
|
52
|
-
}) => any;
|
|
53
|
-
"day-header": (props: {
|
|
54
|
-
day: string;
|
|
55
|
-
index: number;
|
|
56
|
-
}) => any;
|
|
57
|
-
day: (props: {
|
|
58
|
-
day: CalendarDay;
|
|
59
|
-
}) => any;
|
|
60
|
-
event: (props: {
|
|
61
|
-
event: CalendarEvent;
|
|
62
|
-
view: "month" | "week" | "day";
|
|
63
|
-
}) => any;
|
|
64
|
-
"more-events": (props: {
|
|
65
|
-
events: CalendarEvent[];
|
|
66
|
-
count: number;
|
|
67
|
-
day: CalendarDay;
|
|
68
|
-
}) => any;
|
|
69
|
-
"time-label": (props: {
|
|
70
|
-
hour: number;
|
|
71
|
-
label: string;
|
|
72
|
-
}) => any;
|
|
73
|
-
"all-day": (props: {
|
|
74
|
-
events: CalendarEvent[];
|
|
75
|
-
date: CalendarDate;
|
|
76
|
-
}) => any;
|
|
63
|
+
default: (props: EventCalendarContext) => any;
|
|
77
64
|
}
|
|
78
65
|
declare const _default: typeof __VLS_export;
|
|
79
66
|
export default _default;
|
|
80
67
|
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<EventCalendarProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
68
|
+
select: (payload: SelectPayload) => any;
|
|
81
69
|
"update:modelValue": (value: CalendarDate) => any;
|
|
82
|
-
"update:view": (value:
|
|
70
|
+
"update:view": (value: CalendarView) => any;
|
|
83
71
|
dateClick: (date: CalendarDate) => any;
|
|
84
72
|
eventClick: (event: CalendarEvent) => any;
|
|
85
73
|
eventDrop: (payload: EventDropPayload) => any;
|
|
74
|
+
eventResize: (payload: EventResizePayload) => any;
|
|
75
|
+
eventResizeStart: (payload: {
|
|
76
|
+
event: CalendarEvent;
|
|
77
|
+
}) => any;
|
|
78
|
+
eventResizeEnd: (payload: {
|
|
79
|
+
event: CalendarEvent;
|
|
80
|
+
}) => any;
|
|
86
81
|
}, string, import("vue").PublicProps, Readonly<EventCalendarProps> & Readonly<{
|
|
82
|
+
onSelect?: ((payload: SelectPayload) => any) | undefined;
|
|
87
83
|
"onUpdate:modelValue"?: ((value: CalendarDate) => any) | undefined;
|
|
88
|
-
"onUpdate:view"?: ((value:
|
|
84
|
+
"onUpdate:view"?: ((value: CalendarView) => any) | undefined;
|
|
89
85
|
onDateClick?: ((date: CalendarDate) => any) | undefined;
|
|
90
86
|
onEventClick?: ((event: CalendarEvent) => any) | undefined;
|
|
91
87
|
onEventDrop?: ((payload: EventDropPayload) => any) | undefined;
|
|
92
|
-
|
|
88
|
+
onEventResize?: ((payload: EventResizePayload) => any) | undefined;
|
|
89
|
+
onEventResizeStart?: ((payload: {
|
|
90
|
+
event: CalendarEvent;
|
|
91
|
+
}) => any) | undefined;
|
|
92
|
+
onEventResizeEnd?: ((payload: {
|
|
93
|
+
event: CalendarEvent;
|
|
94
|
+
}) => any) | undefined;
|
|
95
|
+
}>, {
|
|
96
|
+
editable: boolean;
|
|
97
|
+
selectable: boolean;
|
|
98
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, EventCalendarSlots>;
|
|
93
99
|
type __VLS_WithSlots<T, S> = T & {
|
|
94
100
|
new (): {
|
|
95
101
|
$slots: S;
|