asterui 0.12.49 → 0.12.50

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 (200) hide show
  1. package/dist/components/Alert.js +18 -18
  2. package/dist/components/Alert.js.map +1 -1
  3. package/dist/components/Anchor.js +53 -53
  4. package/dist/components/Anchor.js.map +1 -1
  5. package/dist/components/Autocomplete.js +115 -114
  6. package/dist/components/Autocomplete.js.map +1 -1
  7. package/dist/components/Avatar.js +33 -32
  8. package/dist/components/Avatar.js.map +1 -1
  9. package/dist/components/Badge.js +99 -99
  10. package/dist/components/Badge.js.map +1 -1
  11. package/dist/components/Breadcrumb.js +12 -11
  12. package/dist/components/Breadcrumb.js.map +1 -1
  13. package/dist/components/Browser.js +10 -10
  14. package/dist/components/Browser.js.map +1 -1
  15. package/dist/components/Button.js +80 -79
  16. package/dist/components/Button.js.map +1 -1
  17. package/dist/components/Card.d.ts +2 -0
  18. package/dist/components/Card.js +111 -110
  19. package/dist/components/Card.js.map +1 -1
  20. package/dist/components/Carousel.js +59 -59
  21. package/dist/components/Carousel.js.map +1 -1
  22. package/dist/components/Cascader.js +175 -174
  23. package/dist/components/Cascader.js.map +1 -1
  24. package/dist/components/Chat.js +27 -27
  25. package/dist/components/Chat.js.map +1 -1
  26. package/dist/components/Checkbox.js +98 -97
  27. package/dist/components/Checkbox.js.map +1 -1
  28. package/dist/components/Code.js +11 -11
  29. package/dist/components/Code.js.map +1 -1
  30. package/dist/components/Collapse.js +46 -46
  31. package/dist/components/Collapse.js.map +1 -1
  32. package/dist/components/ColorPicker.d.ts +1 -1
  33. package/dist/components/ColorPicker.js +93 -91
  34. package/dist/components/ColorPicker.js.map +1 -1
  35. package/dist/components/Command.js +120 -120
  36. package/dist/components/Command.js.map +1 -1
  37. package/dist/components/ConfigProvider.d.ts +1 -1
  38. package/dist/components/ConfigProvider.js +9 -9
  39. package/dist/components/ConfigProvider.js.map +1 -1
  40. package/dist/components/ContextMenu.js +33 -33
  41. package/dist/components/ContextMenu.js.map +1 -1
  42. package/dist/components/CopyButton.js +74 -73
  43. package/dist/components/CopyButton.js.map +1 -1
  44. package/dist/components/Countdown.js +60 -59
  45. package/dist/components/Countdown.js.map +1 -1
  46. package/dist/components/DatePicker.d.ts +1 -1
  47. package/dist/components/DatePicker.js +54 -53
  48. package/dist/components/DatePicker.js.map +1 -1
  49. package/dist/components/Diff.js +10 -10
  50. package/dist/components/Diff.js.map +1 -1
  51. package/dist/components/Divider.js +21 -20
  52. package/dist/components/Divider.js.map +1 -1
  53. package/dist/components/Dock.js +28 -27
  54. package/dist/components/Dock.js.map +1 -1
  55. package/dist/components/Drawer.js +43 -43
  56. package/dist/components/Drawer.js.map +1 -1
  57. package/dist/components/Dropdown.js +127 -127
  58. package/dist/components/Dropdown.js.map +1 -1
  59. package/dist/components/Empty.js +16 -15
  60. package/dist/components/Empty.js.map +1 -1
  61. package/dist/components/Fieldset.js +11 -10
  62. package/dist/components/Fieldset.js.map +1 -1
  63. package/dist/components/FileInput.js +30 -29
  64. package/dist/components/FileInput.js.map +1 -1
  65. package/dist/components/Filter.d.ts +1 -1
  66. package/dist/components/Filter.js +32 -30
  67. package/dist/components/Filter.js.map +1 -1
  68. package/dist/components/FloatButton.js +83 -83
  69. package/dist/components/FloatButton.js.map +1 -1
  70. package/dist/components/Footer.js +14 -13
  71. package/dist/components/Footer.js.map +1 -1
  72. package/dist/components/Form.js +133 -132
  73. package/dist/components/Form.js.map +1 -1
  74. package/dist/components/Hero.js +12 -11
  75. package/dist/components/Hero.js.map +1 -1
  76. package/dist/components/HoverGallery.js +7 -7
  77. package/dist/components/HoverGallery.js.map +1 -1
  78. package/dist/components/Image.js +40 -40
  79. package/dist/components/Image.js.map +1 -1
  80. package/dist/components/Input.js +171 -169
  81. package/dist/components/Input.js.map +1 -1
  82. package/dist/components/InputNumber.js +84 -83
  83. package/dist/components/InputNumber.js.map +1 -1
  84. package/dist/components/Join.js +11 -10
  85. package/dist/components/Join.js.map +1 -1
  86. package/dist/components/Kbd.js +15 -15
  87. package/dist/components/Kbd.js.map +1 -1
  88. package/dist/components/Layout.js +66 -66
  89. package/dist/components/Layout.js.map +1 -1
  90. package/dist/components/List.d.ts +1 -1
  91. package/dist/components/List.js +75 -72
  92. package/dist/components/List.js.map +1 -1
  93. package/dist/components/Loading.d.ts +1 -1
  94. package/dist/components/Loading.js +31 -29
  95. package/dist/components/Loading.js.map +1 -1
  96. package/dist/components/Mask.js +31 -31
  97. package/dist/components/Mask.js.map +1 -1
  98. package/dist/components/Mention.js +61 -61
  99. package/dist/components/Mention.js.map +1 -1
  100. package/dist/components/Menu.js +84 -84
  101. package/dist/components/Menu.js.map +1 -1
  102. package/dist/components/Message.js +30 -29
  103. package/dist/components/Message.js.map +1 -1
  104. package/dist/components/Modal.js +117 -116
  105. package/dist/components/Modal.js.map +1 -1
  106. package/dist/components/MonthCalendar.d.ts +31 -0
  107. package/dist/components/MonthCalendar.js +205 -0
  108. package/dist/components/MonthCalendar.js.map +1 -0
  109. package/dist/components/Navbar.js +25 -25
  110. package/dist/components/Navbar.js.map +1 -1
  111. package/dist/components/Notification.js +56 -55
  112. package/dist/components/Notification.js.map +1 -1
  113. package/dist/components/OTPInput.js +69 -68
  114. package/dist/components/OTPInput.js.map +1 -1
  115. package/dist/components/Pagination.d.ts +1 -1
  116. package/dist/components/Pagination.js +60 -58
  117. package/dist/components/Pagination.js.map +1 -1
  118. package/dist/components/Phone.js +10 -10
  119. package/dist/components/Phone.js.map +1 -1
  120. package/dist/components/Popconfirm.js +60 -60
  121. package/dist/components/Popconfirm.js.map +1 -1
  122. package/dist/components/Progress.js +17 -17
  123. package/dist/components/Progress.js.map +1 -1
  124. package/dist/components/QRCode.js +23 -23
  125. package/dist/components/QRCode.js.map +1 -1
  126. package/dist/components/RadialProgress.js +17 -17
  127. package/dist/components/RadialProgress.js.map +1 -1
  128. package/dist/components/Radio.js +41 -40
  129. package/dist/components/Radio.js.map +1 -1
  130. package/dist/components/Range.d.ts +1 -1
  131. package/dist/components/Range.js +39 -37
  132. package/dist/components/Range.js.map +1 -1
  133. package/dist/components/Rating.js +79 -78
  134. package/dist/components/Rating.js.map +1 -1
  135. package/dist/components/ResponsiveDrawer.js +27 -27
  136. package/dist/components/ResponsiveDrawer.js.map +1 -1
  137. package/dist/components/RichTextEditor.d.ts +32 -0
  138. package/dist/components/RichTextEditor.js +335 -0
  139. package/dist/components/RichTextEditor.js.map +1 -0
  140. package/dist/components/Segmented.d.ts +1 -1
  141. package/dist/components/Segmented.js +48 -46
  142. package/dist/components/Segmented.js.map +1 -1
  143. package/dist/components/Select.js +55 -54
  144. package/dist/components/Select.js.map +1 -1
  145. package/dist/components/Skeleton.js +9 -9
  146. package/dist/components/Skeleton.js.map +1 -1
  147. package/dist/components/Splitter.js +93 -93
  148. package/dist/components/Splitter.js.map +1 -1
  149. package/dist/components/Stat.js +17 -16
  150. package/dist/components/Stat.js.map +1 -1
  151. package/dist/components/Status.js +29 -29
  152. package/dist/components/Status.js.map +1 -1
  153. package/dist/components/Steps.js +61 -61
  154. package/dist/components/Steps.js.map +1 -1
  155. package/dist/components/Table.js +256 -256
  156. package/dist/components/Table.js.map +1 -1
  157. package/dist/components/Tabs.js +65 -65
  158. package/dist/components/Tabs.js.map +1 -1
  159. package/dist/components/Tag.js +147 -147
  160. package/dist/components/Tag.js.map +1 -1
  161. package/dist/components/TextRotate.js +6 -6
  162. package/dist/components/TextRotate.js.map +1 -1
  163. package/dist/components/Textarea.js +35 -34
  164. package/dist/components/Textarea.js.map +1 -1
  165. package/dist/components/ThemeController.d.ts +1 -1
  166. package/dist/components/ThemeController.js +71 -68
  167. package/dist/components/ThemeController.js.map +1 -1
  168. package/dist/components/TimePicker.d.ts +1 -1
  169. package/dist/components/TimePicker.js +133 -129
  170. package/dist/components/TimePicker.js.map +1 -1
  171. package/dist/components/Timeline.js +79 -79
  172. package/dist/components/Timeline.js.map +1 -1
  173. package/dist/components/Toggle.js +33 -32
  174. package/dist/components/Toggle.js.map +1 -1
  175. package/dist/components/Tooltip.js +25 -25
  176. package/dist/components/Tooltip.js.map +1 -1
  177. package/dist/components/Tour.js +126 -126
  178. package/dist/components/Tour.js.map +1 -1
  179. package/dist/components/Transfer.js +93 -92
  180. package/dist/components/Transfer.js.map +1 -1
  181. package/dist/components/Tree.js +200 -200
  182. package/dist/components/Tree.js.map +1 -1
  183. package/dist/components/TreeSelect.js +255 -254
  184. package/dist/components/TreeSelect.js.map +1 -1
  185. package/dist/components/Typography.js +71 -70
  186. package/dist/components/Typography.js.map +1 -1
  187. package/dist/components/Upload.js +81 -81
  188. package/dist/components/Upload.js.map +1 -1
  189. package/dist/components/WeekCalendar.d.ts +35 -0
  190. package/dist/components/WeekCalendar.js +204 -0
  191. package/dist/components/WeekCalendar.js.map +1 -0
  192. package/dist/components/Window.js +7 -7
  193. package/dist/components/Window.js.map +1 -1
  194. package/dist/editor.d.ts +1 -0
  195. package/dist/editor.js +5 -0
  196. package/dist/editor.js.map +1 -0
  197. package/dist/index.d.ts +4 -0
  198. package/dist/index.js +211 -207
  199. package/dist/index.js.map +1 -1
  200. package/package.json +30 -1
@@ -0,0 +1,204 @@
1
+ import { jsxs as d, jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as L, useRef as M, useEffect as R, useMemo as C } from "react";
3
+ const F = {
4
+ locale: "en",
5
+ daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
6
+ monthsLong: [
7
+ "January",
8
+ "February",
9
+ "March",
10
+ "April",
11
+ "May",
12
+ "June",
13
+ "July",
14
+ "August",
15
+ "September",
16
+ "October",
17
+ "November",
18
+ "December"
19
+ ],
20
+ moreText: "more",
21
+ formatTime: (s) => {
22
+ const t = s.getHours();
23
+ return `${t === 0 ? 12 : t > 12 ? t - 12 : t}:00 ${t < 12 ? "AM" : "PM"}`.replace(" ", "").toLowerCase().replace(":00", "");
24
+ }
25
+ }, $ = (s) => _(s, /* @__PURE__ */ new Date()), _ = (s, t) => {
26
+ const n = new Date(s), c = new Date(t);
27
+ return n.setHours(0, 0, 0, 0), c.setHours(0, 0, 0, 0), c.getTime() === n.getTime();
28
+ }, k = (s) => {
29
+ const t = /* @__PURE__ */ new Date(), n = new Date(s);
30
+ return t.setHours(0, 0, 0, 0), n.setHours(0, 0, 0, 0), n < t;
31
+ }, J = (s) => {
32
+ const t = new Date(s), n = t.getDay(), c = t.getDate() - n;
33
+ return new Date(t.setDate(c));
34
+ }, O = (s, t) => {
35
+ const n = new Date(s);
36
+ return n.setDate(n.getDate() + t), n;
37
+ }, u = (s, t) => {
38
+ const n = s.getDate(), c = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][s.getDay()];
39
+ return t === "YYYY-MM-DD" ? s.toISOString().split("T")[0] : t === "ddd" ? c : t === "D" ? n.toString() : s.toISOString();
40
+ }, P = L(
41
+ ({
42
+ date: s = /* @__PURE__ */ new Date(),
43
+ events: t = [],
44
+ locale: n = F,
45
+ onEventClick: c,
46
+ onDayClick: N,
47
+ onSelectSlot: x,
48
+ allowPastInteraction: m = !1,
49
+ fitContainer: f = !1,
50
+ startHour: y = 9,
51
+ endHour: Y = 17,
52
+ className: T = "",
53
+ ...S
54
+ }, E) => {
55
+ const g = M(null), D = M(null);
56
+ R(() => {
57
+ const e = () => {
58
+ if (g.current && D.current) {
59
+ const r = g.current, o = D.current, l = r.offsetWidth - r.clientWidth;
60
+ o.style.paddingRight = `${l}px`;
61
+ }
62
+ };
63
+ return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
64
+ }, []);
65
+ const H = J(s), w = Array.from({ length: 7 }, (e, r) => O(H, r)), W = C(() => {
66
+ const e = {};
67
+ return t.forEach((r) => {
68
+ const o = u(r.date, "YYYY-MM-DD");
69
+ e[o] || (e[o] = []), e[o].push(r);
70
+ }), e;
71
+ }, [t]), v = Array.from({ length: Y - y + 1 }, (e, r) => r + y), A = (e) => n.formatTime ? n.formatTime(new Date(2e3, 0, 1, e, 0)) : `${e === 0 ? 12 : e > 12 ? e - 12 : e}:00 ${e < 12 ? "AM" : "PM"}`, j = (e, r) => (W[e] || []).filter((l) => l.date.getHours() === r);
72
+ return /* @__PURE__ */ d(
73
+ "div",
74
+ {
75
+ ref: E,
76
+ className: `flex h-full flex-col overflow-hidden border-b border-base-200 bg-base-100 ${T}`,
77
+ ...S,
78
+ children: [
79
+ /* @__PURE__ */ d(
80
+ "div",
81
+ {
82
+ ref: D,
83
+ className: "grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 bg-base-100",
84
+ children: [
85
+ /* @__PURE__ */ i("div", { className: "week-calendar-time-column" }),
86
+ w.map((e) => {
87
+ const r = k(e), o = $(e);
88
+ return /* @__PURE__ */ d(
89
+ "div",
90
+ {
91
+ className: `
92
+ cursor-pointer px-2 py-0.5 text-center transition-colors hover:bg-primary/5
93
+ ${r && !m ? "cursor-not-allowed" : ""}
94
+ `,
95
+ onClick: () => {
96
+ r && !m || N?.(e);
97
+ },
98
+ children: [
99
+ /* @__PURE__ */ i(
100
+ "div",
101
+ {
102
+ className: `
103
+ text-xs font-medium uppercase
104
+ ${r ? "text-base-content/40" : "text-base-content/60"}
105
+ `,
106
+ children: u(e, "ddd")
107
+ }
108
+ ),
109
+ /* @__PURE__ */ i(
110
+ "div",
111
+ {
112
+ className: `
113
+ mx-auto flex items-center justify-center text-xs font-medium transition-all
114
+ ${o ? "font-bold text-primary" : ""}
115
+ ${r && !o ? "text-base-content/40" : "text-base-content"}
116
+ `,
117
+ children: u(e, "D")
118
+ }
119
+ )
120
+ ]
121
+ },
122
+ u(e, "YYYY-MM-DD")
123
+ );
124
+ })
125
+ ]
126
+ }
127
+ ),
128
+ /* @__PURE__ */ i(
129
+ "div",
130
+ {
131
+ ref: g,
132
+ className: f ? "grid flex-1" : "flex-1 overflow-y-auto",
133
+ style: f ? { gridTemplateRows: `repeat(${v.length}, 1fr)` } : void 0,
134
+ children: v.map((e) => /* @__PURE__ */ d(
135
+ "div",
136
+ {
137
+ className: `grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 last:border-b-0 ${f ? "min-h-10" : "h-20"}`,
138
+ children: [
139
+ /* @__PURE__ */ i("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", children: A(e) }),
140
+ w.map((r) => {
141
+ const o = u(r, "YYYY-MM-DD"), l = j(o, e), h = k(r) && !$(r);
142
+ return /* @__PURE__ */ i(
143
+ "div",
144
+ {
145
+ className: `
146
+ relative flex cursor-pointer flex-col justify-start overflow-y-auto border-r border-base-200 p-1 last:border-r-0
147
+ hover:bg-primary/5
148
+ ${f ? "" : "h-20"}
149
+ ${h && !m ? "cursor-not-allowed hover:cursor-not-allowed" : ""}
150
+ `,
151
+ onClick: (a) => {
152
+ if (!(h && !m) && x && (a.target === a.currentTarget || a.target.classList.contains("week-calendar-time-cell"))) {
153
+ const b = new Date(r);
154
+ b.setHours(e, 0, 0, 0);
155
+ const p = new Date(r);
156
+ p.setHours(e + 1, 0, 0, 0), x({ start: b, end: p });
157
+ }
158
+ },
159
+ children: l.map((a, b) => /* @__PURE__ */ d(
160
+ "div",
161
+ {
162
+ className: `
163
+ mb-px flex shrink-0 cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none
164
+ text-base-content transition-colors hover:bg-base-content/5 last:mb-0
165
+ ${a.strikethrough ? "line-through" : ""}
166
+ `,
167
+ style: a.style,
168
+ title: a.title,
169
+ onClick: (p) => {
170
+ p.stopPropagation(), c?.(a);
171
+ },
172
+ children: [
173
+ /* @__PURE__ */ i(
174
+ "div",
175
+ {
176
+ className: "mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full",
177
+ style: { backgroundColor: a.color || "#bfbfbf" }
178
+ }
179
+ ),
180
+ /* @__PURE__ */ i("div", { className: "min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap", children: a.title })
181
+ ]
182
+ },
183
+ b
184
+ ))
185
+ },
186
+ `${o}-${e}`
187
+ );
188
+ })
189
+ ]
190
+ },
191
+ e
192
+ ))
193
+ }
194
+ )
195
+ ]
196
+ }
197
+ );
198
+ }
199
+ );
200
+ P.displayName = "WeekCalendar";
201
+ export {
202
+ P as WeekCalendar
203
+ };
204
+ //# sourceMappingURL=WeekCalendar.js.map
@@ -0,0 +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,10 +1,10 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- const a = ({
3
- children: e,
4
- className: o = "",
5
- contentClassName: d = ""
6
- }) => /* @__PURE__ */ r("div", { className: `mockup-window border border-base-300 ${o}`, children: /* @__PURE__ */ r("div", { className: `border-t border-base-300 ${d}`, children: e }) });
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 }) });
7
7
  export {
8
- a as Window
8
+ i as Window
9
9
  };
10
10
  //# sourceMappingURL=Window.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Window.js","sources":["../../src/components/Window.tsx"],"sourcesContent":["import React from 'react'\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={`mockup-window border border-base-300 ${className}`}>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["Window","children","className","contentClassName","jsx"],"mappings":";AAQO,MAAMA,IAAgC,CAAC;AAAA,EAC5C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AACrB,MAEI,gBAAAC,EAAC,OAAA,EAAI,WAAW,wCAAwCF,CAAS,IAC/D,UAAA,gBAAAE,EAAC,OAAA,EAAI,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 {\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;"}
@@ -0,0 +1 @@
1
+ export { RichTextEditor, type RichTextEditorProps, type ToolbarItem } from './components/RichTextEditor';
package/dist/editor.js ADDED
@@ -0,0 +1,5 @@
1
+ import { RichTextEditor as t } from "./components/RichTextEditor.js";
2
+ export {
3
+ t as RichTextEditor
4
+ };
5
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/index.d.ts CHANGED
@@ -46,6 +46,10 @@ export { Countdown } from './components/Countdown';
46
46
  export type { CountdownProps } from './components/Countdown';
47
47
  export { DatePicker } from './components/DatePicker';
48
48
  export type { DatePickerProps } from './components/DatePicker';
49
+ export { MonthCalendar } from './components/MonthCalendar';
50
+ export type { MonthCalendarProps, CalendarEvent, CalendarLocale } from './components/MonthCalendar';
51
+ export { WeekCalendar } from './components/WeekCalendar';
52
+ export type { WeekCalendarProps } from './components/WeekCalendar';
49
53
  export { Descriptions } from './components/Descriptions';
50
54
  export type { DescriptionsProps, DescriptionsItemProps, DescriptionsItemConfig, DescriptionsSize, DescriptionsLayout } from './components/Descriptions';
51
55
  export { Diff } from './components/Diff';