asterui 0.12.61 → 0.12.63

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 (179) hide show
  1. package/dist/components/Affix.d.ts +2 -0
  2. package/dist/components/Affix.js.map +1 -1
  3. package/dist/components/Alert.d.ts +2 -0
  4. package/dist/components/Alert.js.map +1 -1
  5. package/dist/components/Anchor.d.ts +2 -0
  6. package/dist/components/Anchor.js +79 -75
  7. package/dist/components/Anchor.js.map +1 -1
  8. package/dist/components/Autocomplete.d.ts +1 -0
  9. package/dist/components/Autocomplete.js +115 -110
  10. package/dist/components/Autocomplete.js.map +1 -1
  11. package/dist/components/Avatar.d.ts +4 -0
  12. package/dist/components/Avatar.js.map +1 -1
  13. package/dist/components/Breadcrumb.d.ts +4 -2
  14. package/dist/components/Breadcrumb.js +54 -29
  15. package/dist/components/Breadcrumb.js.map +1 -1
  16. package/dist/components/Browser.d.ts +2 -0
  17. package/dist/components/Browser.js.map +1 -1
  18. package/dist/components/Button.d.ts +5 -1
  19. package/dist/components/Button.js +117 -107
  20. package/dist/components/Button.js.map +1 -1
  21. package/dist/components/Chart.d.ts +1 -0
  22. package/dist/components/Chart.js +31 -30
  23. package/dist/components/Chart.js.map +1 -1
  24. package/dist/components/Chat.d.ts +1 -0
  25. package/dist/components/Chat.js +39 -28
  26. package/dist/components/Chat.js.map +1 -1
  27. package/dist/components/Code.d.ts +2 -0
  28. package/dist/components/Code.js.map +1 -1
  29. package/dist/components/Command.d.ts +5 -2
  30. package/dist/components/Command.js +262 -233
  31. package/dist/components/Command.js.map +1 -1
  32. package/dist/components/Container.d.ts +2 -0
  33. package/dist/components/Container.js.map +1 -1
  34. package/dist/components/ContextMenu.d.ts +4 -0
  35. package/dist/components/ContextMenu.js +157 -122
  36. package/dist/components/ContextMenu.js.map +1 -1
  37. package/dist/components/CopyButton.d.ts +2 -0
  38. package/dist/components/CopyButton.js +9 -8
  39. package/dist/components/CopyButton.js.map +1 -1
  40. package/dist/components/Countdown.d.ts +3 -3
  41. package/dist/components/Countdown.js +49 -47
  42. package/dist/components/Countdown.js.map +1 -1
  43. package/dist/components/Diff.d.ts +3 -3
  44. package/dist/components/Diff.js +14 -10
  45. package/dist/components/Diff.js.map +1 -1
  46. package/dist/components/Divider.d.ts +2 -0
  47. package/dist/components/Divider.js.map +1 -1
  48. package/dist/components/Dock.d.ts +6 -0
  49. package/dist/components/Dock.js +75 -38
  50. package/dist/components/Dock.js.map +1 -1
  51. package/dist/components/Dropdown.js +110 -110
  52. package/dist/components/Dropdown.js.map +1 -1
  53. package/dist/components/Fieldset.d.ts +2 -0
  54. package/dist/components/Fieldset.js.map +1 -1
  55. package/dist/components/FileInput.d.ts +1 -0
  56. package/dist/components/FileInput.js +26 -26
  57. package/dist/components/FileInput.js.map +1 -1
  58. package/dist/components/Filter.d.ts +1 -0
  59. package/dist/components/Filter.js +43 -40
  60. package/dist/components/Filter.js.map +1 -1
  61. package/dist/components/Flex.d.ts +1 -0
  62. package/dist/components/Flex.js +43 -42
  63. package/dist/components/Flex.js.map +1 -1
  64. package/dist/components/FloatButton.d.ts +9 -0
  65. package/dist/components/FloatButton.js +211 -136
  66. package/dist/components/FloatButton.js.map +1 -1
  67. package/dist/components/Footer.d.ts +2 -0
  68. package/dist/components/Footer.js.map +1 -1
  69. package/dist/components/Grid.d.ts +4 -0
  70. package/dist/components/Grid.js.map +1 -1
  71. package/dist/components/Hero.d.ts +2 -0
  72. package/dist/components/Hero.js.map +1 -1
  73. package/dist/components/HoverGallery.d.ts +3 -3
  74. package/dist/components/HoverGallery.js +12 -10
  75. package/dist/components/HoverGallery.js.map +1 -1
  76. package/dist/components/Input.d.ts +1 -0
  77. package/dist/components/Input.js +201 -184
  78. package/dist/components/Input.js.map +1 -1
  79. package/dist/components/Join.d.ts +2 -0
  80. package/dist/components/Join.js.map +1 -1
  81. package/dist/components/Kbd.d.ts +2 -0
  82. package/dist/components/Kbd.js.map +1 -1
  83. package/dist/components/Loading.d.ts +3 -0
  84. package/dist/components/Loading.js +58 -35
  85. package/dist/components/Loading.js.map +1 -1
  86. package/dist/components/Mask.d.ts +2 -2
  87. package/dist/components/Mask.js.map +1 -1
  88. package/dist/components/Masonry.d.ts +1 -0
  89. package/dist/components/Masonry.js +45 -42
  90. package/dist/components/Masonry.js.map +1 -1
  91. package/dist/components/Mention.d.ts +1 -0
  92. package/dist/components/Mention.js +95 -91
  93. package/dist/components/Mention.js.map +1 -1
  94. package/dist/components/MonthCalendar.d.ts +1 -0
  95. package/dist/components/MonthCalendar.js +104 -97
  96. package/dist/components/MonthCalendar.js.map +1 -1
  97. package/dist/components/Navbar.d.ts +2 -0
  98. package/dist/components/Navbar.js.map +1 -1
  99. package/dist/components/Notification.js +32 -18
  100. package/dist/components/Notification.js.map +1 -1
  101. package/dist/components/Phone.d.ts +3 -2
  102. package/dist/components/Phone.js +10 -8
  103. package/dist/components/Phone.js.map +1 -1
  104. package/dist/components/Popconfirm.js +110 -92
  105. package/dist/components/Popconfirm.js.map +1 -1
  106. package/dist/components/Popover.d.ts +2 -0
  107. package/dist/components/Popover.js.map +1 -1
  108. package/dist/components/Progress.d.ts +2 -0
  109. package/dist/components/Progress.js.map +1 -1
  110. package/dist/components/QRCode.d.ts +1 -0
  111. package/dist/components/QRCode.js +84 -55
  112. package/dist/components/QRCode.js.map +1 -1
  113. package/dist/components/RadialProgress.d.ts +1 -0
  114. package/dist/components/RadialProgress.js +19 -17
  115. package/dist/components/RadialProgress.js.map +1 -1
  116. package/dist/components/Radio.d.ts +6 -3
  117. package/dist/components/Radio.js +9 -9
  118. package/dist/components/Radio.js.map +1 -1
  119. package/dist/components/Range.d.ts +1 -0
  120. package/dist/components/Range.js +45 -43
  121. package/dist/components/Range.js.map +1 -1
  122. package/dist/components/Rating.d.ts +4 -2
  123. package/dist/components/Rating.js +83 -79
  124. package/dist/components/Rating.js.map +1 -1
  125. package/dist/components/Responsive.d.ts +4 -2
  126. package/dist/components/Responsive.js +10 -9
  127. package/dist/components/Responsive.js.map +1 -1
  128. package/dist/components/Result.d.ts +1 -0
  129. package/dist/components/Result.js +24 -22
  130. package/dist/components/Result.js.map +1 -1
  131. package/dist/components/Select.d.ts +1 -0
  132. package/dist/components/Select.js +72 -62
  133. package/dist/components/Select.js.map +1 -1
  134. package/dist/components/Skeleton.d.ts +2 -0
  135. package/dist/components/Skeleton.js.map +1 -1
  136. package/dist/components/Space.d.ts +2 -0
  137. package/dist/components/Space.js.map +1 -1
  138. package/dist/components/Splitter.d.ts +2 -0
  139. package/dist/components/Splitter.js +137 -131
  140. package/dist/components/Splitter.js.map +1 -1
  141. package/dist/components/Stat.d.ts +4 -2
  142. package/dist/components/Stat.js +19 -18
  143. package/dist/components/Stat.js.map +1 -1
  144. package/dist/components/Status.d.ts +3 -3
  145. package/dist/components/Status.js +27 -25
  146. package/dist/components/Status.js.map +1 -1
  147. package/dist/components/Steps.d.ts +4 -2
  148. package/dist/components/Steps.js +56 -52
  149. package/dist/components/Steps.js.map +1 -1
  150. package/dist/components/TextRotate.d.ts +1 -0
  151. package/dist/components/TextRotate.js +14 -12
  152. package/dist/components/TextRotate.js.map +1 -1
  153. package/dist/components/Textarea.d.ts +1 -0
  154. package/dist/components/Textarea.js +31 -30
  155. package/dist/components/Textarea.js.map +1 -1
  156. package/dist/components/ThemeController.d.ts +6 -3
  157. package/dist/components/ThemeController.js +101 -92
  158. package/dist/components/ThemeController.js.map +1 -1
  159. package/dist/components/Toggle.d.ts +2 -0
  160. package/dist/components/Toggle.js.map +1 -1
  161. package/dist/components/Tooltip.d.ts +2 -0
  162. package/dist/components/Tooltip.js +38 -32
  163. package/dist/components/Tooltip.js.map +1 -1
  164. package/dist/components/Typography.d.ts +10 -5
  165. package/dist/components/Typography.js +84 -81
  166. package/dist/components/Typography.js.map +1 -1
  167. package/dist/components/VirtualList.d.ts +2 -1
  168. package/dist/components/VirtualList.js +40 -36
  169. package/dist/components/VirtualList.js.map +1 -1
  170. package/dist/components/Watermark.d.ts +1 -0
  171. package/dist/components/Watermark.js +74 -71
  172. package/dist/components/Watermark.js.map +1 -1
  173. package/dist/components/WeekCalendar.d.ts +1 -0
  174. package/dist/components/WeekCalendar.js +91 -76
  175. package/dist/components/WeekCalendar.js.map +1 -1
  176. package/dist/components/Window.d.ts +3 -2
  177. package/dist/components/Window.js +9 -7
  178. package/dist/components/Window.js.map +1 -1
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WeekCalendar.js","sources":["../../src/components/WeekCalendar.tsx"],"sourcesContent":["import React, { useMemo, useRef, useEffect, forwardRef } from 'react'\n\n// DaisyUI classes\n// (No DaisyUI classes used in this component)\n\n// Types (shared with MonthCalendar)\nexport type CalendarEvent = {\n date: Date\n title: string\n color: string\n strikethrough?: boolean\n style?: React.CSSProperties\n}\n\nexport type CalendarLocale = {\n locale: string\n daysShort: string[]\n monthsLong: string[]\n moreText: string\n formatTime?: (date: Date) => string\n}\n\n// Default English locale\nconst defaultLocale: CalendarLocale = {\n locale: 'en',\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n monthsLong: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n moreText: 'more',\n formatTime: (date: Date): string => {\n const hour = date.getHours()\n const formatted = `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n return formatted.replace(' ', '').toLowerCase().replace(':00', '')\n },\n}\n\n// Utility functions\nconst isToday = (date: Date) => isEqual(date, new Date())\n\nconst isEqual = (a: Date, b: Date) => {\n const acopy = new Date(a)\n const bcopy = new Date(b)\n acopy.setHours(0, 0, 0, 0)\n bcopy.setHours(0, 0, 0, 0)\n return bcopy.getTime() === acopy.getTime()\n}\n\nconst isPastDate = (date: Date) => {\n const today = new Date()\n const checkDate = new Date(date)\n today.setHours(0, 0, 0, 0)\n checkDate.setHours(0, 0, 0, 0)\n return checkDate < today\n}\n\nconst getWeekStart = (date: Date): Date => {\n const d = new Date(date)\n const day = d.getDay()\n const diff = d.getDate() - day\n return new Date(d.setDate(diff))\n}\n\nconst addDays = (date: Date, days: number): Date => {\n const result = new Date(date)\n result.setDate(result.getDate() + days)\n return result\n}\n\nconst formatDate = (date: Date, format: string): string => {\n const day = date.getDate()\n const dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()]\n\n if (format === 'YYYY-MM-DD') {\n return date.toISOString().split('T')[0]\n }\n if (format === 'ddd') {\n return dayName\n }\n if (format === 'D') {\n return day.toString()\n }\n return date.toISOString()\n}\n\nexport interface WeekCalendarProps<T extends CalendarEvent = CalendarEvent>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n date?: Date\n events?: T[]\n onEventClick?: (event: T) => void\n onDayClick?: (date: Date) => void\n onSelectSlot?: (slotInfo: { start: Date; end: Date }) => void\n locale?: CalendarLocale\n allowPastInteraction?: boolean\n fitContainer?: boolean\n /** Start hour for the time grid (0-23) */\n startHour?: number\n /** End hour for the time grid (0-23) */\n endHour?: number\n}\n\nexport const WeekCalendar = forwardRef<HTMLDivElement, WeekCalendarProps>(\n <T extends CalendarEvent>(\n {\n date = new Date(),\n events = [],\n locale = defaultLocale,\n onEventClick,\n onDayClick,\n onSelectSlot,\n allowPastInteraction = false,\n fitContainer = false,\n startHour = 9,\n endHour = 17,\n className = '',\n ...rest\n }: WeekCalendarProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const bodyRef = useRef<HTMLDivElement>(null)\n const headerRef = useRef<HTMLDivElement>(null)\n\n // Adjust header padding to account for scrollbar\n useEffect(() => {\n const adjustScrollbar = () => {\n if (bodyRef.current && headerRef.current) {\n const bodyElement = bodyRef.current\n const headerElement = headerRef.current\n const scrollbarWidth = bodyElement.offsetWidth - bodyElement.clientWidth\n headerElement.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n adjustScrollbar()\n window.addEventListener('resize', adjustScrollbar)\n return () => window.removeEventListener('resize', adjustScrollbar)\n }, [])\n\n\n const weekStart = getWeekStart(date)\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n // Group events by day\n const eventsByDay = useMemo(() => {\n const grouped: Record<string, T[]> = {}\n events.forEach((event) => {\n const eventDate = formatDate(event.date, 'YYYY-MM-DD')\n if (!grouped[eventDate]) {\n grouped[eventDate] = []\n }\n grouped[eventDate].push(event as T)\n })\n return grouped\n }, [events])\n\n // Time slots from startHour to endHour\n const timeSlots = Array.from({ length: endHour - startHour + 1 }, (_, i) => i + startHour)\n\n const formatHour = (hour: number) => {\n if (locale.formatTime) {\n return locale.formatTime(new Date(2000, 0, 1, hour, 0))\n }\n return `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n }\n\n const getEventsForDayAndHour = (dayStr: string, hour: number) => {\n const dayEvents = eventsByDay[dayStr] || []\n return dayEvents.filter((event) => {\n const eventHour = event.date.getHours()\n return eventHour === hour\n })\n }\n\n return (\n <div\n ref={ref}\n className={`flex h-full flex-col overflow-hidden border-b border-base-200 bg-base-100 ${className}`}\n {...rest}\n >\n {/* Header with days */}\n <div\n ref={headerRef}\n className=\"grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 bg-base-100\"\n >\n <div className=\"week-calendar-time-column\" />\n {weekDays.map((day) => {\n const isPast = isPastDate(day)\n const isTodayDate = isToday(day)\n\n return (\n <div\n key={formatDate(day, 'YYYY-MM-DD')}\n className={`\n cursor-pointer px-2 py-0.5 text-center transition-colors hover:bg-primary/5\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed' : ''}\n `}\n onClick={() => {\n if (isPast && !allowPastInteraction) {\n return\n }\n onDayClick?.(day)\n }}\n >\n <div\n className={`\n text-xs font-medium uppercase\n ${isPast ? 'text-base-content/40' : 'text-base-content/60'}\n `}\n >\n {formatDate(day, 'ddd')}\n </div>\n <div\n className={`\n mx-auto flex items-center justify-center text-xs font-medium transition-all\n ${isTodayDate ? 'font-bold text-primary' : ''}\n ${isPast && !isTodayDate ? 'text-base-content/40' : 'text-base-content'}\n `}\n >\n {formatDate(day, 'D')}\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Time grid */}\n <div\n ref={bodyRef}\n className={fitContainer ? 'grid flex-1' : 'flex-1 overflow-y-auto'}\n style={fitContainer ? { gridTemplateRows: `repeat(${timeSlots.length}, 1fr)` } : undefined}\n >\n {timeSlots.map((hour) => (\n <div\n key={hour}\n className={`grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 last:border-b-0 ${fitContainer ? 'min-h-10' : 'h-20'}`}\n >\n {/* Time label */}\n <div className=\"flex items-start justify-end border-l border-r border-base-200 bg-base-200/50 p-2 pt-1 text-xs text-base-content/50\">\n {formatHour(hour)}\n </div>\n\n {/* Day cells */}\n {weekDays.map((day) => {\n const dayStr = formatDate(day, 'YYYY-MM-DD')\n const hourEvents = getEventsForDayAndHour(dayStr, hour)\n const isPast = isPastDate(day) && !isToday(day)\n\n return (\n <div\n key={`${dayStr}-${hour}`}\n className={`\n relative flex cursor-pointer flex-col justify-start overflow-y-auto border-r border-base-200 p-1 last:border-r-0\n hover:bg-primary/5\n ${fitContainer ? '' : 'h-20'}\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed hover:cursor-not-allowed' : ''}\n `}\n onClick={(e) => {\n if (isPast && !allowPastInteraction) {\n return\n }\n\n if (\n onSelectSlot &&\n (e.target === e.currentTarget ||\n (e.target as HTMLElement).classList.contains('week-calendar-time-cell'))\n ) {\n const start = new Date(day)\n start.setHours(hour, 0, 0, 0)\n\n const end = new Date(day)\n end.setHours(hour + 1, 0, 0, 0)\n\n onSelectSlot({ start, end })\n }\n }}\n >\n {hourEvents.map((event, idx) => (\n <div\n key={idx}\n className={`\n mb-px flex shrink-0 cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none\n text-base-content transition-colors hover:bg-base-content/5 last:mb-0\n ${event.strikethrough ? 'line-through' : ''}\n `}\n style={event.style}\n title={event.title}\n onClick={(e) => {\n e.stopPropagation()\n onEventClick?.(event)\n }}\n >\n <div\n className=\"mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: event.color || '#bfbfbf' }}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {event.title}\n </div>\n </div>\n ))}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n }\n) as <T extends CalendarEvent = CalendarEvent>(\n props: WeekCalendarProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(WeekCalendar as React.FC).displayName = 'WeekCalendar'\n"],"names":["defaultLocale","date","hour","isToday","isEqual","a","b","acopy","bcopy","isPastDate","today","checkDate","getWeekStart","d","day","diff","addDays","days","result","formatDate","format","dayName","WeekCalendar","forwardRef","events","locale","onEventClick","onDayClick","onSelectSlot","allowPastInteraction","fitContainer","startHour","endHour","className","rest","ref","bodyRef","useRef","headerRef","useEffect","adjustScrollbar","bodyElement","headerElement","scrollbarWidth","weekStart","weekDays","_","i","eventsByDay","useMemo","grouped","event","eventDate","timeSlots","formatHour","getEventsForDayAndHour","dayStr","jsxs","jsx","isPast","isTodayDate","hourEvents","e","start","end","idx"],"mappings":"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"}
1
+ {"version":3,"file":"WeekCalendar.js","sources":["../../src/components/WeekCalendar.tsx"],"sourcesContent":["import React, { useMemo, useRef, useEffect, forwardRef } from 'react'\n\n// DaisyUI classes\n// (No DaisyUI classes used in this component)\n\n// Types (shared with MonthCalendar)\nexport type CalendarEvent = {\n date: Date\n title: string\n color: string\n strikethrough?: boolean\n style?: React.CSSProperties\n}\n\nexport type CalendarLocale = {\n locale: string\n daysShort: string[]\n monthsLong: string[]\n moreText: string\n formatTime?: (date: Date) => string\n}\n\n// Default English locale\nconst defaultLocale: CalendarLocale = {\n locale: 'en',\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n monthsLong: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n moreText: 'more',\n formatTime: (date: Date): string => {\n const hour = date.getHours()\n const formatted = `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n return formatted.replace(' ', '').toLowerCase().replace(':00', '')\n },\n}\n\n// Utility functions\nconst isToday = (date: Date) => isEqual(date, new Date())\n\nconst isEqual = (a: Date, b: Date) => {\n const acopy = new Date(a)\n const bcopy = new Date(b)\n acopy.setHours(0, 0, 0, 0)\n bcopy.setHours(0, 0, 0, 0)\n return bcopy.getTime() === acopy.getTime()\n}\n\nconst isPastDate = (date: Date) => {\n const today = new Date()\n const checkDate = new Date(date)\n today.setHours(0, 0, 0, 0)\n checkDate.setHours(0, 0, 0, 0)\n return checkDate < today\n}\n\nconst getWeekStart = (date: Date): Date => {\n const d = new Date(date)\n const day = d.getDay()\n const diff = d.getDate() - day\n return new Date(d.setDate(diff))\n}\n\nconst addDays = (date: Date, days: number): Date => {\n const result = new Date(date)\n result.setDate(result.getDate() + days)\n return result\n}\n\nconst formatDate = (date: Date, format: string): string => {\n const day = date.getDate()\n const dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()]\n\n if (format === 'YYYY-MM-DD') {\n return date.toISOString().split('T')[0]\n }\n if (format === 'ddd') {\n return dayName\n }\n if (format === 'D') {\n return day.toString()\n }\n return date.toISOString()\n}\n\nexport interface WeekCalendarProps<T extends CalendarEvent = CalendarEvent>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n date?: Date\n events?: T[]\n onEventClick?: (event: T) => void\n onDayClick?: (date: Date) => void\n onSelectSlot?: (slotInfo: { start: Date; end: Date }) => void\n locale?: CalendarLocale\n allowPastInteraction?: boolean\n fitContainer?: boolean\n /** Start hour for the time grid (0-23) */\n startHour?: number\n /** End hour for the time grid (0-23) */\n endHour?: number\n 'data-testid'?: string\n}\n\nexport const WeekCalendar = forwardRef<HTMLDivElement, WeekCalendarProps>(\n <T extends CalendarEvent>(\n {\n date = new Date(),\n events = [],\n locale = defaultLocale,\n onEventClick,\n onDayClick,\n onSelectSlot,\n allowPastInteraction = false,\n fitContainer = false,\n startHour = 9,\n endHour = 17,\n className = '',\n 'data-testid': testId,\n ...rest\n }: WeekCalendarProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const bodyRef = useRef<HTMLDivElement>(null)\n const headerRef = useRef<HTMLDivElement>(null)\n\n // Adjust header padding to account for scrollbar\n useEffect(() => {\n const adjustScrollbar = () => {\n if (bodyRef.current && headerRef.current) {\n const bodyElement = bodyRef.current\n const headerElement = headerRef.current\n const scrollbarWidth = bodyElement.offsetWidth - bodyElement.clientWidth\n headerElement.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n adjustScrollbar()\n window.addEventListener('resize', adjustScrollbar)\n return () => window.removeEventListener('resize', adjustScrollbar)\n }, [])\n\n\n const weekStart = getWeekStart(date)\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n // Group events by day\n const eventsByDay = useMemo(() => {\n const grouped: Record<string, T[]> = {}\n events.forEach((event) => {\n const eventDate = formatDate(event.date, 'YYYY-MM-DD')\n if (!grouped[eventDate]) {\n grouped[eventDate] = []\n }\n grouped[eventDate].push(event as T)\n })\n return grouped\n }, [events])\n\n // Time slots from startHour to endHour\n const timeSlots = Array.from({ length: endHour - startHour + 1 }, (_, i) => i + startHour)\n\n const formatHour = (hour: number) => {\n if (locale.formatTime) {\n return locale.formatTime(new Date(2000, 0, 1, hour, 0))\n }\n return `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n }\n\n const getEventsForDayAndHour = (dayStr: string, hour: number) => {\n const dayEvents = eventsByDay[dayStr] || []\n return dayEvents.filter((event) => {\n const eventHour = event.date.getHours()\n return eventHour === hour\n })\n }\n\n return (\n <div\n ref={ref}\n className={`flex h-full flex-col overflow-hidden border-b border-base-200 bg-base-100 ${className}`}\n data-testid={testId}\n {...rest}\n >\n {/* Header with days */}\n <div\n ref={headerRef}\n className=\"grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 bg-base-100\"\n data-testid={getTestId('header')}\n >\n <div className=\"week-calendar-time-column\" />\n {weekDays.map((day) => {\n const isPast = isPastDate(day)\n const isTodayDate = isToday(day)\n const dayKey = formatDate(day, 'YYYY-MM-DD')\n\n return (\n <div\n key={dayKey}\n className={`\n cursor-pointer px-2 py-0.5 text-center transition-colors hover:bg-primary/5\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed' : ''}\n `}\n data-testid={getTestId(`header-day-${dayKey}`)}\n onClick={() => {\n if (isPast && !allowPastInteraction) {\n return\n }\n onDayClick?.(day)\n }}\n >\n <div\n className={`\n text-xs font-medium uppercase\n ${isPast ? 'text-base-content/40' : 'text-base-content/60'}\n `}\n >\n {formatDate(day, 'ddd')}\n </div>\n <div\n className={`\n mx-auto flex items-center justify-center text-xs font-medium transition-all\n ${isTodayDate ? 'font-bold text-primary' : ''}\n ${isPast && !isTodayDate ? 'text-base-content/40' : 'text-base-content'}\n `}\n >\n {formatDate(day, 'D')}\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Time grid */}\n <div\n ref={bodyRef}\n className={fitContainer ? 'grid flex-1' : 'flex-1 overflow-y-auto'}\n style={fitContainer ? { gridTemplateRows: `repeat(${timeSlots.length}, 1fr)` } : undefined}\n data-testid={getTestId('grid')}\n >\n {timeSlots.map((hour) => (\n <div\n key={hour}\n className={`grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 last:border-b-0 ${fitContainer ? 'min-h-10' : 'h-20'}`}\n data-testid={getTestId(`row-${hour}`)}\n >\n {/* Time label */}\n <div\n className=\"flex items-start justify-end border-l border-r border-base-200 bg-base-200/50 p-2 pt-1 text-xs text-base-content/50\"\n data-testid={getTestId(`time-${hour}`)}\n >\n {formatHour(hour)}\n </div>\n\n {/* Day cells */}\n {weekDays.map((day) => {\n const dayStr = formatDate(day, 'YYYY-MM-DD')\n const hourEvents = getEventsForDayAndHour(dayStr, hour)\n const isPast = isPastDate(day) && !isToday(day)\n\n return (\n <div\n key={`${dayStr}-${hour}`}\n className={`\n relative flex cursor-pointer flex-col justify-start overflow-y-auto border-r border-base-200 p-1 last:border-r-0\n hover:bg-primary/5\n ${fitContainer ? '' : 'h-20'}\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed hover:cursor-not-allowed' : ''}\n `}\n data-testid={getTestId(`cell-${dayStr}-${hour}`)}\n onClick={(e) => {\n if (isPast && !allowPastInteraction) {\n return\n }\n\n if (\n onSelectSlot &&\n (e.target === e.currentTarget ||\n (e.target as HTMLElement).classList.contains('week-calendar-time-cell'))\n ) {\n const start = new Date(day)\n start.setHours(hour, 0, 0, 0)\n\n const end = new Date(day)\n end.setHours(hour + 1, 0, 0, 0)\n\n onSelectSlot({ start, end })\n }\n }}\n >\n {hourEvents.map((event, idx) => (\n <div\n key={idx}\n className={`\n mb-px flex shrink-0 cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none\n text-base-content transition-colors hover:bg-base-content/5 last:mb-0\n ${event.strikethrough ? 'line-through' : ''}\n `}\n style={event.style}\n title={event.title}\n data-testid={getTestId(`event-${dayStr}-${hour}-${idx}`)}\n onClick={(e) => {\n e.stopPropagation()\n onEventClick?.(event)\n }}\n >\n <div\n className=\"mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: event.color || '#bfbfbf' }}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {event.title}\n </div>\n </div>\n ))}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n }\n) as <T extends CalendarEvent = CalendarEvent>(\n props: WeekCalendarProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(WeekCalendar as React.FC).displayName = 'WeekCalendar'\n"],"names":["defaultLocale","date","hour","isToday","isEqual","a","b","acopy","bcopy","isPastDate","today","checkDate","getWeekStart","d","day","diff","addDays","days","result","formatDate","format","dayName","WeekCalendar","forwardRef","events","locale","onEventClick","onDayClick","onSelectSlot","allowPastInteraction","fitContainer","startHour","endHour","className","testId","rest","ref","bodyRef","useRef","headerRef","useEffect","adjustScrollbar","bodyElement","headerElement","scrollbarWidth","weekStart","weekDays","_","i","getTestId","suffix","eventsByDay","useMemo","grouped","event","eventDate","timeSlots","formatHour","getEventsForDayAndHour","dayStr","jsxs","jsx","isPast","isTodayDate","dayKey","hourEvents","e","start","end","idx"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { default as React } from 'react';
2
- export interface WindowProps {
2
+ export interface WindowProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  children: React.ReactNode;
4
- className?: string;
5
4
  contentClassName?: string;
5
+ /** Test ID for testing */
6
+ 'data-testid'?: string;
6
7
  }
7
8
  export declare const Window: React.FC<WindowProps>;
@@ -1,10 +1,12 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- const s = "mockup-window", i = ({
3
- children: r,
4
- className: d = "",
5
- contentClassName: e = ""
6
- }) => /* @__PURE__ */ o("div", { className: `${s} border border-base-300 ${d}`, children: /* @__PURE__ */ o("div", { className: `border-t border-base-300 ${e}`, children: r }) });
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ const a = "mockup-window", c = ({
3
+ children: o,
4
+ className: r = "",
5
+ contentClassName: e = "",
6
+ "data-testid": t,
7
+ ...s
8
+ }) => /* @__PURE__ */ d("div", { className: `${a} border border-base-300 ${r}`, "data-testid": t, ...s, children: /* @__PURE__ */ d("div", { className: `border-t border-base-300 ${e}`, children: o }) });
7
9
  export {
8
- i as Window
10
+ c as Window
9
11
  };
10
12
  //# sourceMappingURL=Window.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Window.js","sources":["../../src/components/Window.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dMockupWindow = 'mockup-window'\n\nexport interface WindowProps {\n children: React.ReactNode\n className?: string\n contentClassName?: string\n}\n\nexport const Window: React.FC<WindowProps> = ({\n children,\n className = '',\n contentClassName = '',\n}) => {\n return (\n <div className={`${dMockupWindow} border border-base-300 ${className}`}>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["dMockupWindow","Window","children","className","contentClassName","jsx"],"mappings":";AAGA,MAAMA,IAAgB,iBAQTC,IAAgC,CAAC;AAAA,EAC5C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AACrB,MAEI,gBAAAC,EAAC,OAAA,EAAI,WAAW,GAAGL,CAAa,2BAA2BG,CAAS,IAClE,UAAA,gBAAAE,EAAC,SAAI,WAAW,4BAA4BD,CAAgB,IACzD,UAAAF,GACH,GACF;"}
1
+ {"version":3,"file":"Window.js","sources":["../../src/components/Window.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dMockupWindow = 'mockup-window'\n\nexport interface WindowProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n contentClassName?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Window: React.FC<WindowProps> = ({\n children,\n className = '',\n contentClassName = '',\n 'data-testid': testId,\n ...rest\n}) => {\n return (\n <div className={`${dMockupWindow} border border-base-300 ${className}`} data-testid={testId} {...rest}>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["dMockupWindow","Window","children","className","contentClassName","testId","rest"],"mappings":";AAGA,MAAMA,IAAgB,iBASTC,IAAgC,CAAC;AAAA,EAC5C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,eAAeC;AAAA,EACf,GAAGC;AACL,wBAEK,OAAA,EAAI,WAAW,GAAGN,CAAa,2BAA2BG,CAAS,IAAI,eAAaE,GAAS,GAAGC,GAC/F,4BAAC,OAAA,EAAI,WAAW,4BAA4BF,CAAgB,IACzD,UAAAF,GACH,EAAA,CACF;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asterui",
3
- "version": "0.12.61",
3
+ "version": "0.12.63",
4
4
  "description": "React UI component library with DaisyUI",
5
5
  "homepage": "https://asterui.com",
6
6
  "repository": {