nuxt-ui-elements-pro 0.1.8 → 0.1.10
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 +5 -4
- package/dist/runtime/components/EventCalendar.d.vue.ts +11 -7
- package/dist/runtime/components/EventCalendar.vue +15 -12
- package/dist/runtime/components/EventCalendar.vue.d.ts +11 -7
- package/dist/runtime/components/event-calendar/EventCalendarListView.d.vue.ts +1 -1
- package/dist/runtime/components/event-calendar/EventCalendarListView.vue +1 -1
- package/dist/runtime/components/event-calendar/EventCalendarListView.vue.d.ts +1 -1
- package/dist/runtime/components/event-calendar/EventCalendarMonthView.d.vue.ts +6 -3
- package/dist/runtime/components/event-calendar/EventCalendarMonthView.vue +21 -14
- package/dist/runtime/components/event-calendar/EventCalendarMonthView.vue.d.ts +6 -3
- package/dist/runtime/components/event-calendar/EventCalendarTimeGrid.d.vue.ts +2 -2
- package/dist/runtime/components/event-calendar/EventCalendarTimeGrid.vue +2 -2
- package/dist/runtime/components/event-calendar/EventCalendarTimeGrid.vue.d.ts +2 -2
- package/package.json +1 -1
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -14,10 +14,11 @@ const eventCalendar = (options) => ({
|
|
|
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
16
|
monthBody: "flex flex-col select-none",
|
|
17
|
-
monthWeekRow: "",
|
|
18
|
-
dayCell: "border-b border-r border-default hover:bg-elevated/50 cursor-pointer",
|
|
17
|
+
monthWeekRow: "relative",
|
|
18
|
+
dayCell: "relative border-b border-r border-default hover:bg-elevated/50 cursor-pointer",
|
|
19
19
|
dayCellOutside: "bg-muted/20",
|
|
20
|
-
|
|
20
|
+
monthDayCell: "absolute inset-0 pointer-events-none",
|
|
21
|
+
monthDayNumber: "relative z-[1] p-1 pointer-events-none",
|
|
21
22
|
dayNumber: "text-xs font-medium p-1 leading-none",
|
|
22
23
|
dayNumberToday: "inline-flex items-center justify-center size-6 rounded-full text-inverted font-semibold",
|
|
23
24
|
dayNumberOutside: "text-muted",
|
|
@@ -33,7 +34,7 @@ const eventCalendar = (options) => ({
|
|
|
33
34
|
eventTime: "font-medium mr-1",
|
|
34
35
|
recurringIcon: "size-3 shrink-0 opacity-60 align-middle mr-0.5",
|
|
35
36
|
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",
|
|
37
|
+
expandedOverlay: "absolute top-1/2 -translate-x-1/2 -translate-y-1/2 bg-default border border-default rounded-lg p-1.5 shadow-xl z-20 animate-expand-overlay",
|
|
37
38
|
// Week/Day view
|
|
38
39
|
timeGridRoot: "flex-1 flex flex-col min-h-0 overflow-hidden",
|
|
39
40
|
columnHeaders: "flex border-b border-default shrink-0",
|
|
@@ -100,32 +100,36 @@ export interface EventCalendarSlots {
|
|
|
100
100
|
view: CalendarView;
|
|
101
101
|
}) => any;
|
|
102
102
|
/** Customize weekday header labels (month view) */
|
|
103
|
-
"
|
|
103
|
+
"month-weekday-header"?: (props: {
|
|
104
104
|
day: string;
|
|
105
105
|
index: number;
|
|
106
106
|
}) => any;
|
|
107
|
-
/** Customize day cell
|
|
108
|
-
day?: (props: {
|
|
107
|
+
/** Customize the day header area in each month cell (month view) */
|
|
108
|
+
"month-day-header"?: (props: {
|
|
109
|
+
day: CalendarDay;
|
|
110
|
+
}) => any;
|
|
111
|
+
/** Full day-cell overlay for custom interactive content (month view). Container has pointer-events: none; use pointer-events-auto on your content. */
|
|
112
|
+
"month-day-cell"?: (props: {
|
|
109
113
|
day: CalendarDay;
|
|
110
114
|
}) => any;
|
|
111
115
|
/** Customize "+N more" indicator (month view) */
|
|
112
|
-
"more-events"?: (props: {
|
|
116
|
+
"month-more-events"?: (props: {
|
|
113
117
|
events: CalendarEvent[];
|
|
114
118
|
count: number;
|
|
115
119
|
day: CalendarDay;
|
|
116
120
|
}) => any;
|
|
117
121
|
/** Customize time labels (week/day view) */
|
|
118
|
-
"time-label"?: (props: {
|
|
122
|
+
"time-grid-label"?: (props: {
|
|
119
123
|
hour: number;
|
|
120
124
|
label: string;
|
|
121
125
|
}) => any;
|
|
122
126
|
/** Customize all-day event area (week/day view) */
|
|
123
|
-
"all-day"?: (props: {
|
|
127
|
+
"time-grid-all-day"?: (props: {
|
|
124
128
|
events: CalendarEvent[];
|
|
125
129
|
date: CalendarDate;
|
|
126
130
|
}) => any;
|
|
127
131
|
/** Customize date group headers (list view) */
|
|
128
|
-
"date-header"?: (props: {
|
|
132
|
+
"list-date-header"?: (props: {
|
|
129
133
|
day: CalendarDay;
|
|
130
134
|
weekday: string;
|
|
131
135
|
dateLabel: string;
|
|
@@ -223,14 +223,17 @@ defineExpose({
|
|
|
223
223
|
<template v-if="slots.event" #event="eventProps">
|
|
224
224
|
<slot name="event" v-bind="eventProps" />
|
|
225
225
|
</template>
|
|
226
|
-
<template v-if="slots['
|
|
227
|
-
<slot name="
|
|
226
|
+
<template v-if="slots['month-weekday-header']" #month-weekday-header="dayHeaderProps">
|
|
227
|
+
<slot name="month-weekday-header" v-bind="dayHeaderProps" />
|
|
228
228
|
</template>
|
|
229
|
-
<template v-if="slots
|
|
230
|
-
<slot name="day" v-bind="dayProps" />
|
|
229
|
+
<template v-if="slots['month-day-header']" #month-day-header="dayProps">
|
|
230
|
+
<slot name="month-day-header" v-bind="dayProps" />
|
|
231
231
|
</template>
|
|
232
|
-
<template v-if="slots['
|
|
233
|
-
<slot name="
|
|
232
|
+
<template v-if="slots['month-day-cell']" #month-day-cell="cellProps">
|
|
233
|
+
<slot name="month-day-cell" v-bind="cellProps" />
|
|
234
|
+
</template>
|
|
235
|
+
<template v-if="slots['month-more-events']" #month-more-events="moreProps">
|
|
236
|
+
<slot name="month-more-events" v-bind="moreProps" />
|
|
234
237
|
</template>
|
|
235
238
|
<template v-if="slots.loading" #loading>
|
|
236
239
|
<slot name="loading" />
|
|
@@ -242,11 +245,11 @@ defineExpose({
|
|
|
242
245
|
<template v-if="slots.event" #event="eventProps">
|
|
243
246
|
<slot name="event" v-bind="eventProps" />
|
|
244
247
|
</template>
|
|
245
|
-
<template v-if="slots['time-label']" #time-label="timeLabelProps">
|
|
246
|
-
<slot name="time-label" v-bind="timeLabelProps" />
|
|
248
|
+
<template v-if="slots['time-grid-label']" #time-grid-label="timeLabelProps">
|
|
249
|
+
<slot name="time-grid-label" v-bind="timeLabelProps" />
|
|
247
250
|
</template>
|
|
248
|
-
<template v-if="slots['all-day']" #all-day="allDayProps">
|
|
249
|
-
<slot name="all-day" v-bind="allDayProps" />
|
|
251
|
+
<template v-if="slots['time-grid-all-day']" #time-grid-all-day="allDayProps">
|
|
252
|
+
<slot name="time-grid-all-day" v-bind="allDayProps" />
|
|
250
253
|
</template>
|
|
251
254
|
<template v-if="slots.loading" #loading>
|
|
252
255
|
<slot name="loading" />
|
|
@@ -258,8 +261,8 @@ defineExpose({
|
|
|
258
261
|
<template v-if="slots.event" #event="eventProps">
|
|
259
262
|
<slot name="event" v-bind="eventProps" />
|
|
260
263
|
</template>
|
|
261
|
-
<template v-if="slots['date-header']" #date-header="dateHeaderProps">
|
|
262
|
-
<slot name="date-header" v-bind="dateHeaderProps" />
|
|
264
|
+
<template v-if="slots['list-date-header']" #list-date-header="dateHeaderProps">
|
|
265
|
+
<slot name="list-date-header" v-bind="dateHeaderProps" />
|
|
263
266
|
</template>
|
|
264
267
|
</EventCalendarListView>
|
|
265
268
|
</template>
|
|
@@ -100,32 +100,36 @@ export interface EventCalendarSlots {
|
|
|
100
100
|
view: CalendarView;
|
|
101
101
|
}) => any;
|
|
102
102
|
/** Customize weekday header labels (month view) */
|
|
103
|
-
"
|
|
103
|
+
"month-weekday-header"?: (props: {
|
|
104
104
|
day: string;
|
|
105
105
|
index: number;
|
|
106
106
|
}) => any;
|
|
107
|
-
/** Customize day cell
|
|
108
|
-
day?: (props: {
|
|
107
|
+
/** Customize the day header area in each month cell (month view) */
|
|
108
|
+
"month-day-header"?: (props: {
|
|
109
|
+
day: CalendarDay;
|
|
110
|
+
}) => any;
|
|
111
|
+
/** Full day-cell overlay for custom interactive content (month view). Container has pointer-events: none; use pointer-events-auto on your content. */
|
|
112
|
+
"month-day-cell"?: (props: {
|
|
109
113
|
day: CalendarDay;
|
|
110
114
|
}) => any;
|
|
111
115
|
/** Customize "+N more" indicator (month view) */
|
|
112
|
-
"more-events"?: (props: {
|
|
116
|
+
"month-more-events"?: (props: {
|
|
113
117
|
events: CalendarEvent[];
|
|
114
118
|
count: number;
|
|
115
119
|
day: CalendarDay;
|
|
116
120
|
}) => any;
|
|
117
121
|
/** Customize time labels (week/day view) */
|
|
118
|
-
"time-label"?: (props: {
|
|
122
|
+
"time-grid-label"?: (props: {
|
|
119
123
|
hour: number;
|
|
120
124
|
label: string;
|
|
121
125
|
}) => any;
|
|
122
126
|
/** Customize all-day event area (week/day view) */
|
|
123
|
-
"all-day"?: (props: {
|
|
127
|
+
"time-grid-all-day"?: (props: {
|
|
124
128
|
events: CalendarEvent[];
|
|
125
129
|
date: CalendarDate;
|
|
126
130
|
}) => any;
|
|
127
131
|
/** Customize date group headers (list view) */
|
|
128
|
-
"date-header"?: (props: {
|
|
132
|
+
"list-date-header"?: (props: {
|
|
129
133
|
day: CalendarDay;
|
|
130
134
|
weekday: string;
|
|
131
135
|
dateLabel: string;
|
|
@@ -31,7 +31,7 @@ function formatDateLabel(day) {
|
|
|
31
31
|
<div
|
|
32
32
|
data-slot="listDateHeader"
|
|
33
33
|
:class="ctx.ui.value.listDateHeader({ class: ctx.propUi.value?.listDateHeader })">
|
|
34
|
-
<slot name="date-header" :day="day" :weekday="formatWeekday(day)" :date-label="formatDateLabel(day)">
|
|
34
|
+
<slot name="list-date-header" :day="day" :weekday="formatWeekday(day)" :date-label="formatDateLabel(day)">
|
|
35
35
|
<span
|
|
36
36
|
data-slot="listDateWeekday"
|
|
37
37
|
:class="ctx.ui.value.listDateWeekday({ class: ctx.propUi.value?.listDateWeekday })">
|
|
@@ -5,18 +5,21 @@ export interface EventCalendarMonthViewProps {
|
|
|
5
5
|
as?: string | Component;
|
|
6
6
|
}
|
|
7
7
|
export interface EventCalendarMonthViewSlots {
|
|
8
|
-
"
|
|
8
|
+
"month-weekday-header": (props: {
|
|
9
9
|
day: string;
|
|
10
10
|
index: number;
|
|
11
11
|
}) => any;
|
|
12
|
-
day: (props: {
|
|
12
|
+
"month-day-header": (props: {
|
|
13
|
+
day: CalendarDay;
|
|
14
|
+
}) => any;
|
|
15
|
+
"month-day-cell": (props: {
|
|
13
16
|
day: CalendarDay;
|
|
14
17
|
}) => any;
|
|
15
18
|
event: (props: {
|
|
16
19
|
event: CalendarEvent;
|
|
17
20
|
view: CalendarView;
|
|
18
21
|
}) => any;
|
|
19
|
-
"more-events": (props: {
|
|
22
|
+
"month-more-events": (props: {
|
|
20
23
|
events: CalendarEvent[];
|
|
21
24
|
count: number;
|
|
22
25
|
day: CalendarDay;
|
|
@@ -38,7 +38,7 @@ onKeyStroke("Escape", () => {
|
|
|
38
38
|
data-slot="weekdayCell"
|
|
39
39
|
role="columnheader"
|
|
40
40
|
:class="ctx.ui.value.weekdayCell({ class: ctx.propUi.value?.weekdayCell })">
|
|
41
|
-
<slot name="
|
|
41
|
+
<slot name="month-weekday-header" :day="day" :index="index">
|
|
42
42
|
{{ day }}
|
|
43
43
|
</slot>
|
|
44
44
|
</div>
|
|
@@ -78,12 +78,13 @@ onKeyStroke("Escape", () => {
|
|
|
78
78
|
:aria-current="day.isToday ? 'date' : void 0"
|
|
79
79
|
:data-date="day.date.toString()"
|
|
80
80
|
:class="[
|
|
81
|
+
'group/cell',
|
|
81
82
|
ctx.ui.value.dayCell({ class: ctx.propUi.value?.dayCell }),
|
|
82
83
|
!day.isCurrentMonth && ctx.ui.value.dayCellOutside({ class: ctx.propUi.value?.dayCellOutside }),
|
|
83
84
|
ctx.dropTargetKey.value === `month-${day.date.toString()}` && ctx.ui.value.dropTarget({ class: ctx.propUi.value?.dropTarget }),
|
|
84
85
|
colIdx === 6 && 'border-r-0!',
|
|
85
86
|
ctx.isDateInSelection(day.date) && ctx.ui.value.selectionOverlay({ class: ctx.propUi.value?.selectionOverlay }),
|
|
86
|
-
isExpanded(day.date.toString()) && '
|
|
87
|
+
isExpanded(day.date.toString()) && 'z-10'
|
|
87
88
|
]"
|
|
88
89
|
:style="{
|
|
89
90
|
gridColumn: `${colIdx + 1}`,
|
|
@@ -96,6 +97,12 @@ onKeyStroke("Escape", () => {
|
|
|
96
97
|
@dragover="ctx.onDragOver(`month-${day.date.toString()}`, $event)"
|
|
97
98
|
@dragleave="ctx.onDragLeave"
|
|
98
99
|
@drop="ctx.onDropMonthCell(day.date, $event)">
|
|
100
|
+
<div
|
|
101
|
+
v-if="$slots['month-day-cell']"
|
|
102
|
+
data-slot="monthDayCell"
|
|
103
|
+
:class="ctx.ui.value.monthDayCell({ class: ctx.propUi.value?.monthDayCell })">
|
|
104
|
+
<slot name="month-day-cell" :day="day" />
|
|
105
|
+
</div>
|
|
99
106
|
</div>
|
|
100
107
|
|
|
101
108
|
<!-- Layer 2: Day numbers (row 1) -->
|
|
@@ -106,19 +113,20 @@ onKeyStroke("Escape", () => {
|
|
|
106
113
|
:class="ctx.ui.value.monthDayNumber({ class: ctx.propUi.value?.monthDayNumber })"
|
|
107
114
|
:style="{
|
|
108
115
|
gridColumn: `${colIdx + 1}`,
|
|
109
|
-
gridRow: '1'
|
|
110
|
-
pointerEvents: 'none'
|
|
116
|
+
gridRow: '1'
|
|
111
117
|
}">
|
|
112
|
-
<
|
|
113
|
-
<
|
|
114
|
-
|
|
118
|
+
<div class="pointer-events-auto w-fit">
|
|
119
|
+
<slot name="month-day-header" :day="day">
|
|
120
|
+
<div
|
|
121
|
+
:class="[
|
|
115
122
|
!day.isToday && ctx.ui.value.dayNumber({ class: ctx.propUi.value?.dayNumber }),
|
|
116
123
|
day.isToday && ctx.ui.value.dayNumberToday({ class: ctx.propUi.value?.dayNumberToday }),
|
|
117
124
|
!day.isCurrentMonth && !day.isToday && ctx.ui.value.dayNumberOutside({ class: ctx.propUi.value?.dayNumberOutside })
|
|
118
125
|
]">
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
{{ day.date.day }}
|
|
127
|
+
</div>
|
|
128
|
+
</slot>
|
|
129
|
+
</div>
|
|
122
130
|
</div>
|
|
123
131
|
|
|
124
132
|
<!-- Layer 3: Spanning event bars -->
|
|
@@ -225,7 +233,7 @@ onKeyStroke("Escape", () => {
|
|
|
225
233
|
@keydown.enter.stop="openExpandDay(layout.week.days[overflowItem.col].date.toString(), $event)"
|
|
226
234
|
@keydown.space.prevent.stop="openExpandDay(layout.week.days[overflowItem.col].date.toString(), $event)">
|
|
227
235
|
<slot
|
|
228
|
-
name="more-events"
|
|
236
|
+
name="month-more-events"
|
|
229
237
|
:events="overflowItem.hiddenEvents.map((e) => e.original)"
|
|
230
238
|
:count="overflowItem.hiddenCount"
|
|
231
239
|
:day="layout.week.days[overflowItem.col]">
|
|
@@ -243,9 +251,8 @@ onKeyStroke("Escape", () => {
|
|
|
243
251
|
:aria-label="`Events for ${ctx.formatDateAriaLabel(day.date)}`"
|
|
244
252
|
:class="ctx.ui.value.expandedOverlay({ class: ctx.propUi.value?.expandedOverlay })"
|
|
245
253
|
:style="{
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
zIndex: 20
|
|
254
|
+
left: `calc(${colIdx} / 7 * 100% + 100% / 14)`,
|
|
255
|
+
width: 'calc(100% / 7 + 16px)'
|
|
249
256
|
}"
|
|
250
257
|
@click.stop>
|
|
251
258
|
<div
|
|
@@ -5,18 +5,21 @@ export interface EventCalendarMonthViewProps {
|
|
|
5
5
|
as?: string | Component;
|
|
6
6
|
}
|
|
7
7
|
export interface EventCalendarMonthViewSlots {
|
|
8
|
-
"
|
|
8
|
+
"month-weekday-header": (props: {
|
|
9
9
|
day: string;
|
|
10
10
|
index: number;
|
|
11
11
|
}) => any;
|
|
12
|
-
day: (props: {
|
|
12
|
+
"month-day-header": (props: {
|
|
13
|
+
day: CalendarDay;
|
|
14
|
+
}) => any;
|
|
15
|
+
"month-day-cell": (props: {
|
|
13
16
|
day: CalendarDay;
|
|
14
17
|
}) => any;
|
|
15
18
|
event: (props: {
|
|
16
19
|
event: CalendarEvent;
|
|
17
20
|
view: CalendarView;
|
|
18
21
|
}) => any;
|
|
19
|
-
"more-events": (props: {
|
|
22
|
+
"month-more-events": (props: {
|
|
20
23
|
events: CalendarEvent[];
|
|
21
24
|
count: number;
|
|
22
25
|
day: CalendarDay;
|
|
@@ -10,11 +10,11 @@ export interface EventCalendarTimeGridSlots {
|
|
|
10
10
|
event: CalendarEvent;
|
|
11
11
|
view: CalendarView;
|
|
12
12
|
}) => any;
|
|
13
|
-
"time-label": (props: {
|
|
13
|
+
"time-grid-label": (props: {
|
|
14
14
|
hour: number;
|
|
15
15
|
label: string;
|
|
16
16
|
}) => any;
|
|
17
|
-
"all-day": (props: {
|
|
17
|
+
"time-grid-all-day": (props: {
|
|
18
18
|
events: CalendarEvent[];
|
|
19
19
|
date: CalendarDate;
|
|
20
20
|
}) => any;
|
|
@@ -62,7 +62,7 @@ const ctx = useEventCalendarContext();
|
|
|
62
62
|
@dragover="ctx.onDragOver(`allday-${day.dateKey}`, $event)"
|
|
63
63
|
@dragleave="ctx.onDragLeave"
|
|
64
64
|
@drop="ctx.onDropMonthCell(day.date, $event)">
|
|
65
|
-
<slot name="all-day" :events="day.allDayEvents.map((e) => e.original)" :date="day.date">
|
|
65
|
+
<slot name="time-grid-all-day" :events="day.allDayEvents.map((e) => e.original)" :date="day.date">
|
|
66
66
|
<div
|
|
67
67
|
v-for="event in day.allDayEvents"
|
|
68
68
|
:key="event.id"
|
|
@@ -174,7 +174,7 @@ const ctx = useEventCalendarContext();
|
|
|
174
174
|
:class="ctx.ui.value.timeGutterSlot({ class: ctx.propUi.value?.timeGutterSlot })"
|
|
175
175
|
:style="{ height: `${ctx.SLOT_HEIGHT}px` }">
|
|
176
176
|
<div v-if="slot.label" data-slot="timeLabel" :class="ctx.ui.value.timeLabel({ class: ctx.propUi.value?.timeLabel })">
|
|
177
|
-
<slot name="time-label" :hour="slot.hour" :label="slot.label">
|
|
177
|
+
<slot name="time-grid-label" :hour="slot.hour" :label="slot.label">
|
|
178
178
|
{{ slot.label }}
|
|
179
179
|
</slot>
|
|
180
180
|
</div>
|
|
@@ -10,11 +10,11 @@ export interface EventCalendarTimeGridSlots {
|
|
|
10
10
|
event: CalendarEvent;
|
|
11
11
|
view: CalendarView;
|
|
12
12
|
}) => any;
|
|
13
|
-
"time-label": (props: {
|
|
13
|
+
"time-grid-label": (props: {
|
|
14
14
|
hour: number;
|
|
15
15
|
label: string;
|
|
16
16
|
}) => any;
|
|
17
|
-
"all-day": (props: {
|
|
17
|
+
"time-grid-all-day": (props: {
|
|
18
18
|
events: CalendarEvent[];
|
|
19
19
|
date: CalendarDate;
|
|
20
20
|
}) => any;
|