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.
Files changed (39) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +50 -15
  3. package/dist/runtime/components/EventCalendar.d.vue.ts +48 -42
  4. package/dist/runtime/components/EventCalendar.vue +116 -606
  5. package/dist/runtime/components/EventCalendar.vue.d.ts +48 -42
  6. package/dist/runtime/components/EventCalendarHeader.d.vue.ts +26 -0
  7. package/dist/runtime/components/EventCalendarHeader.vue +48 -0
  8. package/dist/runtime/components/EventCalendarHeader.vue.d.ts +26 -0
  9. package/dist/runtime/components/EventCalendarListView.d.vue.ts +25 -0
  10. package/dist/runtime/components/EventCalendarListView.vue +95 -0
  11. package/dist/runtime/components/EventCalendarListView.vue.d.ts +25 -0
  12. package/dist/runtime/components/EventCalendarMonthView.d.vue.ts +34 -0
  13. package/dist/runtime/components/EventCalendarMonthView.vue +336 -0
  14. package/dist/runtime/components/EventCalendarMonthView.vue.d.ts +34 -0
  15. package/dist/runtime/components/EventCalendarTimeGrid.d.vue.ts +31 -0
  16. package/dist/runtime/components/EventCalendarTimeGrid.vue +306 -0
  17. package/dist/runtime/components/EventCalendarTimeGrid.vue.d.ts +31 -0
  18. package/dist/runtime/composables/useEventCalendar.d.ts +52 -0
  19. package/dist/runtime/composables/useEventCalendar.js +362 -0
  20. package/dist/runtime/composables/useEventCalendarContext.d.ts +8 -0
  21. package/dist/runtime/composables/useEventCalendarContext.js +11 -0
  22. package/dist/runtime/composables/useEventCalendarDragDrop.d.ts +1 -1
  23. package/dist/runtime/composables/useEventCalendarDragDrop.js +11 -9
  24. package/dist/runtime/composables/useEventCalendarKeyboard.d.ts +20 -0
  25. package/dist/runtime/composables/useEventCalendarKeyboard.js +128 -0
  26. package/dist/runtime/composables/useEventCalendarResize.d.ts +31 -0
  27. package/dist/runtime/composables/useEventCalendarResize.js +87 -0
  28. package/dist/runtime/composables/useEventCalendarSelect.d.ts +21 -0
  29. package/dist/runtime/composables/useEventCalendarSelect.js +119 -0
  30. package/dist/runtime/index.d.ts +2 -0
  31. package/dist/runtime/index.js +1 -0
  32. package/dist/runtime/types/event-calendar.d.ts +169 -0
  33. package/dist/runtime/types/index.d.ts +4 -0
  34. package/dist/runtime/types/index.js +4 -0
  35. package/dist/runtime/utils/event-calendar.d.ts +22 -1
  36. package/dist/runtime/utils/event-calendar.js +199 -1
  37. package/dist/runtime/utils/recurrence.d.ts +30 -0
  38. package/dist/runtime/utils/recurrence.js +150 -0
  39. package/package.json +15 -6
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.4",
4
+ "version": "0.1.6",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
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: "grid grid-cols-7",
17
- dayCell: "min-h-24 border-b border-r border-default p-1 last-of-type:border-r-0 hover:bg-elevated/50 cursor-pointer",
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-1 rounded truncate cursor-pointer mb-0.5",
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
- moreEvents: "text-xs text-muted px-1.5 py-0.5 cursor-pointer hover:text-highlighted block w-full",
29
- expandedOverlay: "absolute -m-1.5 min-h-[calc(100%+12px)] bg-default border border-default rounded-lg p-1.5 shadow-xl z-20 animate-expand-overlay",
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
- columnHeaders: "flex border-b border-default",
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
- allDayCell: "flex-1 border-r border-default last:border-r-0 p-0.5 flex flex-wrap gap-0.5",
40
- timeGrid: "relative flex items-start flex-1 overflow-auto h-[600px]",
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, CalendarDay, MonthViewOptions, WeekViewOptions, DayViewOptions, EventDropPayload } from "../types/event-calendar.js";
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?: "month" | "week" | "day";
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: "month" | "week" | "day"];
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
- header: (props: {
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: "day" | "month" | "week") => any;
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: "day" | "month" | "week") => any) | undefined;
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
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, EventCalendarSlots>;
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;