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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-ui-elements-pro",
3
3
  "configKey": "uiElementsPro",
4
- "version": "0.1.8",
4
+ "version": "0.1.10",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
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
- monthDayNumber: "relative z-[1] p-1",
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
- "day-header"?: (props: {
103
+ "month-weekday-header"?: (props: {
104
104
  day: string;
105
105
  index: number;
106
106
  }) => any;
107
- /** Customize day cell content (month view) */
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['day-header']" #day-header="dayHeaderProps">
227
- <slot name="day-header" v-bind="dayHeaderProps" />
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.day" #day="dayProps">
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['more-events']" #more-events="moreProps">
233
- <slot name="more-events" v-bind="moreProps" />
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
- "day-header"?: (props: {
103
+ "month-weekday-header"?: (props: {
104
104
  day: string;
105
105
  index: number;
106
106
  }) => any;
107
- /** Customize day cell content (month view) */
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;
@@ -5,7 +5,7 @@ export interface EventCalendarListViewProps {
5
5
  as?: string | Component;
6
6
  }
7
7
  export interface EventCalendarListViewSlots {
8
- "date-header": (props: {
8
+ "list-date-header": (props: {
9
9
  day: CalendarDay;
10
10
  weekday: string;
11
11
  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,7 +5,7 @@ export interface EventCalendarListViewProps {
5
5
  as?: string | Component;
6
6
  }
7
7
  export interface EventCalendarListViewSlots {
8
- "date-header": (props: {
8
+ "list-date-header": (props: {
9
9
  day: CalendarDay;
10
10
  weekday: string;
11
11
  dateLabel: string;
@@ -5,18 +5,21 @@ export interface EventCalendarMonthViewProps {
5
5
  as?: string | Component;
6
6
  }
7
7
  export interface EventCalendarMonthViewSlots {
8
- "day-header": (props: {
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="day-header" :day="day" :index="index">
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()) && 'relative z-10'
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
- <slot name="day" :day="day">
113
- <div
114
- :class="[
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
- {{ day.date.day }}
120
- </div>
121
- </slot>
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
- gridColumn: `${colIdx + 1}`,
247
- gridRow: '1 / -1',
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
- "day-header": (props: {
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-ui-elements-pro",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Pro components for nuxt-ui-elements",
5
5
  "license": "UNLICENSED",
6
6
  "files": [