asterui 0.12.62 → 0.12.64
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/components/Anchor.d.ts +2 -0
- package/dist/components/Anchor.js +79 -75
- package/dist/components/Anchor.js.map +1 -1
- package/dist/components/Autocomplete.d.ts +1 -0
- package/dist/components/Autocomplete.js +115 -110
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Breadcrumb.d.ts +4 -2
- package/dist/components/Breadcrumb.js +54 -29
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Button.d.ts +5 -1
- package/dist/components/Button.js +117 -107
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Chart.d.ts +1 -0
- package/dist/components/Chart.js +31 -30
- package/dist/components/Chart.js.map +1 -1
- package/dist/components/Chat.d.ts +1 -0
- package/dist/components/Chat.js +32 -30
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Collapse.js +58 -56
- package/dist/components/Collapse.js.map +1 -1
- package/dist/components/Command.d.ts +5 -2
- package/dist/components/Command.js +262 -233
- package/dist/components/Command.js.map +1 -1
- package/dist/components/ContextMenu.d.ts +4 -0
- package/dist/components/ContextMenu.js +149 -130
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/DatePicker.d.ts +19 -1
- package/dist/components/DatePicker.js +266 -87
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Dock.d.ts +2 -0
- package/dist/components/Dock.js +70 -46
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/FileInput.d.ts +1 -0
- package/dist/components/FileInput.js +26 -26
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -0
- package/dist/components/Filter.js +43 -40
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/Flex.d.ts +1 -0
- package/dist/components/Flex.js +43 -42
- package/dist/components/Flex.js.map +1 -1
- package/dist/components/FloatButton.d.ts +3 -0
- package/dist/components/FloatButton.js +178 -127
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Input.d.ts +1 -0
- package/dist/components/Input.js +201 -184
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -0
- package/dist/components/Loading.js +40 -37
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Masonry.d.ts +1 -0
- package/dist/components/Masonry.js +45 -42
- package/dist/components/Masonry.js.map +1 -1
- package/dist/components/Mention.d.ts +1 -0
- package/dist/components/Mention.js +95 -91
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Menu.d.ts +1 -1
- package/dist/components/Menu.js +99 -93
- package/dist/components/Menu.js.map +1 -1
- package/dist/components/Modal.js +26 -17
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +1 -0
- package/dist/components/MonthCalendar.js +104 -97
- package/dist/components/MonthCalendar.js.map +1 -1
- package/dist/components/Notification.js +53 -45
- package/dist/components/Notification.js.map +1 -1
- package/dist/components/QRCode.d.ts +1 -0
- package/dist/components/QRCode.js +84 -55
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.d.ts +1 -0
- package/dist/components/RadialProgress.js +19 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Range.d.ts +1 -0
- package/dist/components/Range.js +45 -43
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.d.ts +4 -2
- package/dist/components/Rating.js +83 -79
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/Responsive.d.ts +4 -2
- package/dist/components/Responsive.js +10 -9
- package/dist/components/Responsive.js.map +1 -1
- package/dist/components/Result.d.ts +1 -0
- package/dist/components/Result.js +24 -22
- package/dist/components/Result.js.map +1 -1
- package/dist/components/Select.d.ts +1 -0
- package/dist/components/Select.js +72 -62
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Splitter.d.ts +2 -0
- package/dist/components/Splitter.js +137 -131
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.d.ts +4 -2
- package/dist/components/Stat.js +19 -18
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Steps.d.ts +4 -2
- package/dist/components/Steps.js +56 -52
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/Tabs.js +69 -57
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/TextRotate.d.ts +1 -0
- package/dist/components/TextRotate.js +14 -12
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.d.ts +1 -0
- package/dist/components/Textarea.js +31 -30
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +6 -3
- package/dist/components/ThemeController.js +101 -92
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/Tooltip.js +38 -35
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Transfer.js +130 -121
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/TreeSelect.js +49 -48
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/components/Typography.d.ts +10 -5
- package/dist/components/Typography.js +84 -81
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/VirtualList.d.ts +2 -1
- package/dist/components/VirtualList.js +40 -36
- package/dist/components/VirtualList.js.map +1 -1
- package/dist/components/Watermark.d.ts +1 -0
- package/dist/components/Watermark.js +74 -71
- package/dist/components/Watermark.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +1 -0
- package/dist/components/WeekCalendar.js +91 -76
- package/dist/components/WeekCalendar.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
const
|
|
1
|
+
import { jsxs as p, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as J, useState as L } from "react";
|
|
3
|
+
const q = {
|
|
4
4
|
locale: "en",
|
|
5
5
|
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
|
6
6
|
monthsLong: [
|
|
@@ -18,179 +18,186 @@ const A = {
|
|
|
18
18
|
"December"
|
|
19
19
|
],
|
|
20
20
|
moreText: "more"
|
|
21
|
-
},
|
|
22
|
-
const
|
|
23
|
-
return
|
|
24
|
-
},
|
|
25
|
-
const e = /* @__PURE__ */ new Date(),
|
|
26
|
-
return e.setHours(0, 0, 0, 0),
|
|
27
|
-
},
|
|
28
|
-
const e = /* @__PURE__ */ new Date(),
|
|
29
|
-
return e.setHours(0, 0, 0, 0),
|
|
30
|
-
},
|
|
31
|
-
(
|
|
32
|
-
),
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
35
|
-
const
|
|
36
|
-
for (let
|
|
37
|
-
const x =
|
|
38
|
-
|
|
21
|
+
}, $ = (t) => k(t, /* @__PURE__ */ new Date()), k = (t, e) => {
|
|
22
|
+
const s = new Date(t), o = new Date(e);
|
|
23
|
+
return s.setHours(0, 0, 0, 0), o.setHours(0, 0, 0, 0), o.getTime() === s.getTime();
|
|
24
|
+
}, z = (t) => {
|
|
25
|
+
const e = /* @__PURE__ */ new Date(), s = new Date(t);
|
|
26
|
+
return e.setHours(0, 0, 0, 0), s.setHours(0, 0, 0, 0), s > e;
|
|
27
|
+
}, G = (t) => {
|
|
28
|
+
const e = /* @__PURE__ */ new Date(), s = new Date(t);
|
|
29
|
+
return e.setHours(0, 0, 0, 0), s.setHours(0, 0, 0, 0), s < e;
|
|
30
|
+
}, K = (t, e) => t.filter(
|
|
31
|
+
(s) => s.date.getDate() === e.getDate() && s.date.getMonth() === e.getMonth() && s.date.getFullYear() === e.getFullYear()
|
|
32
|
+
), T = (t, e) => new Date(t, e + 1, 0).getDate(), R = (t, e) => new Date(t, e, 1).getDay(), W = (t, e) => {
|
|
33
|
+
const s = T(t, e), o = R(t, e), f = [];
|
|
34
|
+
if (o > 0) {
|
|
35
|
+
const r = e === 0 ? 11 : e - 1, a = e === 0 ? t - 1 : t, d = T(a, r);
|
|
36
|
+
for (let u = 0; u < o; u++) {
|
|
37
|
+
const x = d - o + u + 1;
|
|
38
|
+
f.push({
|
|
39
39
|
day: x,
|
|
40
|
-
month:
|
|
40
|
+
month: r,
|
|
41
41
|
year: a,
|
|
42
42
|
isCurrentMonth: !1,
|
|
43
|
-
date: new Date(a,
|
|
43
|
+
date: new Date(a, r, x)
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
const
|
|
48
|
-
for (let
|
|
49
|
-
|
|
50
|
-
day:
|
|
47
|
+
const h = [];
|
|
48
|
+
for (let r = 1; r <= s; r++)
|
|
49
|
+
h.push({
|
|
50
|
+
day: r,
|
|
51
51
|
month: e,
|
|
52
52
|
year: t,
|
|
53
53
|
isCurrentMonth: !0,
|
|
54
|
-
date: new Date(t, e,
|
|
54
|
+
date: new Date(t, e, r)
|
|
55
55
|
});
|
|
56
|
-
const m = [],
|
|
57
|
-
if (
|
|
58
|
-
const
|
|
59
|
-
for (let
|
|
56
|
+
const m = [], g = 42 - (f.length + h.length);
|
|
57
|
+
if (g > 0) {
|
|
58
|
+
const r = e === 11 ? 0 : e + 1, a = e === 11 ? t + 1 : t;
|
|
59
|
+
for (let d = 1; d <= g; d++)
|
|
60
60
|
m.push({
|
|
61
|
-
day:
|
|
62
|
-
month:
|
|
61
|
+
day: d,
|
|
62
|
+
month: r,
|
|
63
63
|
year: a,
|
|
64
64
|
isCurrentMonth: !1,
|
|
65
|
-
date: new Date(a,
|
|
65
|
+
date: new Date(a, r, d)
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
-
return [...
|
|
69
|
-
},
|
|
68
|
+
return [...f, ...h, ...m];
|
|
69
|
+
}, B = J(
|
|
70
70
|
({
|
|
71
71
|
date: t = /* @__PURE__ */ new Date(),
|
|
72
72
|
events: e = [],
|
|
73
|
-
maxEventsPerDay:
|
|
74
|
-
onEventClick:
|
|
75
|
-
onDayClick:
|
|
76
|
-
onMoreEventsClick:
|
|
73
|
+
maxEventsPerDay: s = 5,
|
|
74
|
+
onEventClick: o,
|
|
75
|
+
onDayClick: f,
|
|
76
|
+
onMoreEventsClick: h,
|
|
77
77
|
header: m,
|
|
78
|
-
daySelector:
|
|
79
|
-
locale:
|
|
80
|
-
ellipsis:
|
|
78
|
+
daySelector: M,
|
|
79
|
+
locale: g = q,
|
|
80
|
+
ellipsis: r,
|
|
81
81
|
allowPastInteraction: a = !1,
|
|
82
|
-
className:
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
className: d = "",
|
|
83
|
+
"data-testid": u,
|
|
84
|
+
...x
|
|
85
|
+
}, F) => {
|
|
86
|
+
const [S, H] = L(/* @__PURE__ */ new Date()), N = t.getFullYear(), v = t.getMonth(), l = (n) => u ? `${u}-${n}` : void 0;
|
|
87
|
+
return /* @__PURE__ */ p(
|
|
87
88
|
"div",
|
|
88
89
|
{
|
|
89
|
-
ref:
|
|
90
|
-
className: `flex h-full w-full flex-col bg-base-100 ${
|
|
91
|
-
|
|
90
|
+
ref: F,
|
|
91
|
+
className: `flex h-full w-full flex-col bg-base-100 ${d}`,
|
|
92
|
+
"data-testid": u,
|
|
93
|
+
...x,
|
|
92
94
|
children: [
|
|
93
|
-
m && /* @__PURE__ */
|
|
94
|
-
|
|
95
|
+
m && /* @__PURE__ */ c("div", { className: "mb-4 flex items-center justify-between", "data-testid": l("header"), children: /* @__PURE__ */ c("div", { children: /* @__PURE__ */ p("h2", { className: "m-0 text-lg font-medium text-base-content", children: [
|
|
96
|
+
g.monthsLong[v],
|
|
95
97
|
" ",
|
|
96
|
-
|
|
98
|
+
N
|
|
97
99
|
] }) }) }),
|
|
98
|
-
/* @__PURE__ */
|
|
100
|
+
/* @__PURE__ */ c("div", { className: "grid grid-cols-7 border-b border-base-300", "data-testid": l("weekday-header"), children: g.daysShort.map((n, D) => /* @__PURE__ */ c(
|
|
99
101
|
"div",
|
|
100
102
|
{
|
|
101
103
|
className: "py-1 text-center text-xs font-medium uppercase text-base-content/60",
|
|
102
|
-
|
|
104
|
+
"data-testid": l(`weekday-${D}`),
|
|
105
|
+
children: n
|
|
103
106
|
},
|
|
104
|
-
|
|
107
|
+
D
|
|
105
108
|
)) }),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
const
|
|
108
|
-
return /* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ c("div", { className: "grid flex-1 grid-cols-7 grid-rows-6 border-l border-base-300", "data-testid": l("grid"), children: W(N, v).map((n, D) => {
|
|
110
|
+
const y = K(e, n.date), b = G(n.date) && !$(n.date), Y = M && k(n.date, S), w = `${n.year}-${n.month + 1}-${n.day}`;
|
|
111
|
+
return /* @__PURE__ */ p(
|
|
109
112
|
"div",
|
|
110
113
|
{
|
|
111
114
|
className: `
|
|
112
115
|
relative cursor-pointer overflow-hidden border-b border-r border-base-300 p-1
|
|
113
116
|
hover:bg-base-200
|
|
114
|
-
${
|
|
115
|
-
${
|
|
116
|
-
${
|
|
117
|
-
${
|
|
118
|
-
${
|
|
117
|
+
${n.isCurrentMonth ? "" : "bg-base-200"}
|
|
118
|
+
${$(n.date) ? "bg-primary/10" : ""}
|
|
119
|
+
${b ? "opacity-60" : ""}
|
|
120
|
+
${b && !a ? "cursor-not-allowed" : ""}
|
|
121
|
+
${Y ? "z-10 outline outline-2 outline-primary" : ""}
|
|
119
122
|
`,
|
|
123
|
+
"data-testid": l(`day-${w}`),
|
|
120
124
|
onClick: () => {
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
b && !a || (M && H(n.date), setTimeout(() => {
|
|
126
|
+
f?.(n.date);
|
|
123
127
|
}, 0));
|
|
124
128
|
},
|
|
125
129
|
children: [
|
|
126
|
-
/* @__PURE__ */
|
|
130
|
+
/* @__PURE__ */ c("div", { className: "mb-0.5 flex justify-center", children: /* @__PURE__ */ c(
|
|
127
131
|
"span",
|
|
128
132
|
{
|
|
129
133
|
className: `
|
|
130
134
|
flex items-center justify-center text-xs leading-none
|
|
131
|
-
${
|
|
132
|
-
${
|
|
133
|
-
${
|
|
135
|
+
${$(n.date) ? "font-bold text-primary" : "text-base-content"}
|
|
136
|
+
${n.isCurrentMonth ? "" : "text-base-content/40"}
|
|
137
|
+
${b && n.isCurrentMonth ? "text-base-content/40" : ""}
|
|
134
138
|
`,
|
|
135
|
-
|
|
139
|
+
"data-testid": l(`day-number-${w}`),
|
|
140
|
+
children: n.day
|
|
136
141
|
}
|
|
137
142
|
) }),
|
|
138
|
-
/* @__PURE__ */
|
|
139
|
-
|
|
143
|
+
/* @__PURE__ */ p("div", { className: "flex flex-col", children: [
|
|
144
|
+
y.slice(
|
|
140
145
|
0,
|
|
141
|
-
|
|
142
|
-
).map((
|
|
146
|
+
y.length > s ? s - 1 : s
|
|
147
|
+
).map((i, C) => /* @__PURE__ */ p(
|
|
143
148
|
"div",
|
|
144
149
|
{
|
|
145
150
|
className: `
|
|
146
151
|
flex cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none
|
|
147
152
|
transition-colors hover:bg-base-content/5
|
|
148
|
-
${
|
|
149
|
-
${
|
|
153
|
+
${z(i.date), "text-base-content"}
|
|
154
|
+
${i.strikethrough ? "line-through" : ""}
|
|
150
155
|
`,
|
|
151
|
-
style:
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
style: i.style,
|
|
157
|
+
"data-testid": l(`event-${w}-${C}`),
|
|
158
|
+
onClick: (A) => {
|
|
159
|
+
A.stopPropagation(), o && o(i);
|
|
154
160
|
},
|
|
155
|
-
title:
|
|
161
|
+
title: i.title,
|
|
156
162
|
children: [
|
|
157
|
-
/* @__PURE__ */
|
|
163
|
+
/* @__PURE__ */ c(
|
|
158
164
|
"span",
|
|
159
165
|
{
|
|
160
166
|
className: "mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full",
|
|
161
|
-
style: { backgroundColor:
|
|
167
|
+
style: { backgroundColor: i.color }
|
|
162
168
|
}
|
|
163
169
|
),
|
|
164
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ c(
|
|
165
171
|
"span",
|
|
166
172
|
{
|
|
167
|
-
className: `overflow-hidden whitespace-nowrap ${
|
|
168
|
-
children:
|
|
173
|
+
className: `overflow-hidden whitespace-nowrap ${r ? "text-ellipsis" : ""}`,
|
|
174
|
+
children: i.title
|
|
169
175
|
}
|
|
170
176
|
)
|
|
171
177
|
]
|
|
172
178
|
},
|
|
173
|
-
|
|
179
|
+
C
|
|
174
180
|
)),
|
|
175
|
-
|
|
181
|
+
y.length > s && /* @__PURE__ */ p(
|
|
176
182
|
"div",
|
|
177
183
|
{
|
|
178
184
|
className: "cursor-pointer rounded px-1 py-0.5 text-[11px] text-base-content/60 hover:bg-base-content/5",
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
"data-testid": l(`more-${w}`),
|
|
186
|
+
onClick: (i) => {
|
|
187
|
+
i.stopPropagation(), h && h(n.date, y);
|
|
181
188
|
},
|
|
182
189
|
children: [
|
|
183
190
|
"+",
|
|
184
|
-
|
|
191
|
+
y.length - s + 1,
|
|
185
192
|
" ",
|
|
186
|
-
|
|
193
|
+
g.moreText
|
|
187
194
|
]
|
|
188
195
|
}
|
|
189
196
|
)
|
|
190
197
|
] })
|
|
191
198
|
]
|
|
192
199
|
},
|
|
193
|
-
|
|
200
|
+
D
|
|
194
201
|
);
|
|
195
202
|
}) })
|
|
196
203
|
]
|
|
@@ -198,8 +205,8 @@ const A = {
|
|
|
198
205
|
);
|
|
199
206
|
}
|
|
200
207
|
);
|
|
201
|
-
|
|
208
|
+
B.displayName = "MonthCalendar";
|
|
202
209
|
export {
|
|
203
|
-
|
|
210
|
+
B as MonthCalendar
|
|
204
211
|
};
|
|
205
212
|
//# sourceMappingURL=MonthCalendar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthCalendar.js","sources":["../../src/components/MonthCalendar.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\n\n// DaisyUI classes\n// (No DaisyUI classes used in this component)\n\n// Types\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}\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 isFutureDate = (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 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 getEventsForDate = <T extends CalendarEvent>(events: T[], date: Date) => {\n return events.filter(\n (event) =>\n event.date.getDate() === date.getDate() &&\n event.date.getMonth() === date.getMonth() &&\n event.date.getFullYear() === date.getFullYear()\n )\n}\n\nconst getDaysInMonth = (year: number, month: number) => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number) => {\n return new Date(year, month, 1).getDay()\n}\n\nconst generateCalendarGrid = (year: number, month: number) => {\n const daysInMonth = getDaysInMonth(year, month)\n const firstDayOfMonth = getFirstDayOfMonth(year, month)\n\n const prevMonthDays = []\n\n if (firstDayOfMonth > 0) {\n const prevMonth = month === 0 ? 11 : month - 1\n const prevMonthYear = month === 0 ? year - 1 : year\n const daysInPrevMonth = getDaysInMonth(prevMonthYear, prevMonth)\n\n for (let i = 0; i < firstDayOfMonth; i++) {\n const day = daysInPrevMonth - firstDayOfMonth + i + 1\n prevMonthDays.push({\n day,\n month: prevMonth,\n year: prevMonthYear,\n isCurrentMonth: false,\n date: new Date(prevMonthYear, prevMonth, day),\n })\n }\n }\n\n const currentMonthDays = []\n\n for (let day = 1; day <= daysInMonth; day++) {\n currentMonthDays.push({\n day,\n month,\n year,\n isCurrentMonth: true,\n date: new Date(year, month, day),\n })\n }\n\n const nextMonthDays = []\n const totalDaysDisplayed = prevMonthDays.length + currentMonthDays.length\n const daysToAdd = 6 * 7 - totalDaysDisplayed\n\n if (daysToAdd > 0) {\n const nextMonth = month === 11 ? 0 : month + 1\n const nextMonthYear = month === 11 ? year + 1 : year\n\n for (let day = 1; day <= daysToAdd; day++) {\n nextMonthDays.push({\n day,\n month: nextMonth,\n year: nextMonthYear,\n isCurrentMonth: false,\n date: new Date(nextMonthYear, nextMonth, day),\n })\n }\n }\n\n return [...prevMonthDays, ...currentMonthDays, ...nextMonthDays]\n}\n\nexport interface MonthCalendarProps<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 locale?: CalendarLocale\n allowPastInteraction?: boolean\n maxEventsPerDay?: number\n onMoreEventsClick?: (date: Date, events: T[]) => void\n header?: boolean\n daySelector?: boolean\n ellipsis?: boolean\n}\n\nexport const MonthCalendar = forwardRef<HTMLDivElement, MonthCalendarProps>(\n <T extends CalendarEvent>(\n {\n date = new Date(),\n events = [],\n maxEventsPerDay = 5,\n onEventClick,\n onDayClick,\n onMoreEventsClick,\n header,\n daySelector,\n locale = defaultLocale,\n ellipsis,\n allowPastInteraction = false,\n className = '',\n ...rest\n }: MonthCalendarProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const [selectedDate, setSelectedDate] = useState(new Date())\n\n const year = date.getFullYear()\n const month = date.getMonth()\n\n return (\n <div\n ref={ref}\n className={`flex h-full w-full flex-col bg-base-100 ${className}`}\n {...rest}\n >\n {header && (\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h2 className=\"m-0 text-lg font-medium text-base-content\">\n {locale.monthsLong[month]} {year}\n </h2>\n </div>\n </div>\n )}\n\n {/* Weekday header */}\n <div className=\"grid grid-cols-7 border-b border-base-300\">\n {locale.daysShort.map((day, index) => (\n <div\n key={index}\n className=\"py-1 text-center text-xs font-medium uppercase text-base-content/60\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid flex-1 grid-cols-7 grid-rows-6 border-l border-base-300\">\n {generateCalendarGrid(year, month).map((dateObj, index) => {\n const dateEvents = getEventsForDate(events as T[], dateObj.date)\n const isPast = isPastDate(dateObj.date) && !isToday(dateObj.date)\n const isSelected = daySelector && isEqual(dateObj.date, selectedDate)\n\n return (\n <div\n key={index}\n className={`\n relative cursor-pointer overflow-hidden border-b border-r border-base-300 p-1\n hover:bg-base-200\n ${!dateObj.isCurrentMonth ? 'bg-base-200' : ''}\n ${isToday(dateObj.date) ? 'bg-primary/10' : ''}\n ${isPast ? 'opacity-60' : ''}\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed' : ''}\n ${isSelected ? 'z-10 outline outline-2 outline-primary' : ''}\n `}\n onClick={() => {\n if (isPast && !allowPastInteraction) {\n return\n }\n\n if (daySelector) {\n setSelectedDate(dateObj.date)\n }\n\n setTimeout(() => {\n onDayClick?.(dateObj.date)\n }, 0)\n }}\n >\n {/* Date number */}\n <div className=\"mb-0.5 flex justify-center\">\n <span\n className={`\n flex items-center justify-center text-xs leading-none\n ${isToday(dateObj.date) ? 'font-bold text-primary' : 'text-base-content'}\n ${!dateObj.isCurrentMonth ? 'text-base-content/40' : ''}\n ${isPast && dateObj.isCurrentMonth ? 'text-base-content/40' : ''}\n `}\n >\n {dateObj.day}\n </span>\n </div>\n\n {/* Events container */}\n <div className=\"flex flex-col\">\n {dateEvents\n .slice(\n 0,\n dateEvents.length > maxEventsPerDay\n ? maxEventsPerDay - 1\n : maxEventsPerDay\n )\n .map((event, eventIndex) => (\n <div\n key={eventIndex}\n className={`\n flex cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none\n transition-colors hover:bg-base-content/5\n ${isFutureDate(event.date) ? 'text-base-content' : 'text-base-content'}\n ${event.strikethrough ? 'line-through' : ''}\n `}\n style={event.style}\n onClick={(e) => {\n e.stopPropagation()\n if (onEventClick) {\n onEventClick(event)\n }\n }}\n title={event.title}\n >\n <span\n className=\"mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: event.color }}\n />\n <span\n className={`overflow-hidden whitespace-nowrap ${ellipsis ? 'text-ellipsis' : ''}`}\n >\n {event.title}\n </span>\n </div>\n ))}\n {dateEvents.length > maxEventsPerDay && (\n <div\n className=\"cursor-pointer rounded px-1 py-0.5 text-[11px] text-base-content/60 hover:bg-base-content/5\"\n onClick={(e) => {\n e.stopPropagation()\n if (onMoreEventsClick) {\n onMoreEventsClick(dateObj.date, dateEvents)\n }\n }}\n >\n +{dateEvents.length - maxEventsPerDay + 1} {locale.moreText}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n) as <T extends CalendarEvent = CalendarEvent>(\n props: MonthCalendarProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(MonthCalendar as React.FC).displayName = 'MonthCalendar'\n"],"names":["defaultLocale","isToday","date","isEqual","a","b","acopy","bcopy","isFutureDate","today","checkDate","isPastDate","getEventsForDate","events","event","getDaysInMonth","year","month","getFirstDayOfMonth","generateCalendarGrid","daysInMonth","firstDayOfMonth","prevMonthDays","prevMonth","prevMonthYear","daysInPrevMonth","i","day","currentMonthDays","nextMonthDays","daysToAdd","nextMonth","nextMonthYear","MonthCalendar","forwardRef","maxEventsPerDay","onEventClick","onDayClick","onMoreEventsClick","header","daySelector","locale","ellipsis","allowPastInteraction","className","rest","ref","selectedDate","setSelectedDate","useState","jsxs","jsx","index","dateObj","dateEvents","isPast","isSelected","eventIndex","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonthCalendar.js","sources":["../../src/components/MonthCalendar.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\n\n// DaisyUI classes\n// (No DaisyUI classes used in this component)\n\n// Types\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}\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 isFutureDate = (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 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 getEventsForDate = <T extends CalendarEvent>(events: T[], date: Date) => {\n return events.filter(\n (event) =>\n event.date.getDate() === date.getDate() &&\n event.date.getMonth() === date.getMonth() &&\n event.date.getFullYear() === date.getFullYear()\n )\n}\n\nconst getDaysInMonth = (year: number, month: number) => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number) => {\n return new Date(year, month, 1).getDay()\n}\n\nconst generateCalendarGrid = (year: number, month: number) => {\n const daysInMonth = getDaysInMonth(year, month)\n const firstDayOfMonth = getFirstDayOfMonth(year, month)\n\n const prevMonthDays = []\n\n if (firstDayOfMonth > 0) {\n const prevMonth = month === 0 ? 11 : month - 1\n const prevMonthYear = month === 0 ? year - 1 : year\n const daysInPrevMonth = getDaysInMonth(prevMonthYear, prevMonth)\n\n for (let i = 0; i < firstDayOfMonth; i++) {\n const day = daysInPrevMonth - firstDayOfMonth + i + 1\n prevMonthDays.push({\n day,\n month: prevMonth,\n year: prevMonthYear,\n isCurrentMonth: false,\n date: new Date(prevMonthYear, prevMonth, day),\n })\n }\n }\n\n const currentMonthDays = []\n\n for (let day = 1; day <= daysInMonth; day++) {\n currentMonthDays.push({\n day,\n month,\n year,\n isCurrentMonth: true,\n date: new Date(year, month, day),\n })\n }\n\n const nextMonthDays = []\n const totalDaysDisplayed = prevMonthDays.length + currentMonthDays.length\n const daysToAdd = 6 * 7 - totalDaysDisplayed\n\n if (daysToAdd > 0) {\n const nextMonth = month === 11 ? 0 : month + 1\n const nextMonthYear = month === 11 ? year + 1 : year\n\n for (let day = 1; day <= daysToAdd; day++) {\n nextMonthDays.push({\n day,\n month: nextMonth,\n year: nextMonthYear,\n isCurrentMonth: false,\n date: new Date(nextMonthYear, nextMonth, day),\n })\n }\n }\n\n return [...prevMonthDays, ...currentMonthDays, ...nextMonthDays]\n}\n\nexport interface MonthCalendarProps<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 locale?: CalendarLocale\n allowPastInteraction?: boolean\n maxEventsPerDay?: number\n onMoreEventsClick?: (date: Date, events: T[]) => void\n header?: boolean\n daySelector?: boolean\n ellipsis?: boolean\n 'data-testid'?: string\n}\n\nexport const MonthCalendar = forwardRef<HTMLDivElement, MonthCalendarProps>(\n <T extends CalendarEvent>(\n {\n date = new Date(),\n events = [],\n maxEventsPerDay = 5,\n onEventClick,\n onDayClick,\n onMoreEventsClick,\n header,\n daySelector,\n locale = defaultLocale,\n ellipsis,\n allowPastInteraction = false,\n className = '',\n 'data-testid': testId,\n ...rest\n }: MonthCalendarProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const [selectedDate, setSelectedDate] = useState(new Date())\n\n const year = date.getFullYear()\n const month = date.getMonth()\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <div\n ref={ref}\n className={`flex h-full w-full flex-col bg-base-100 ${className}`}\n data-testid={testId}\n {...rest}\n >\n {header && (\n <div className=\"mb-4 flex items-center justify-between\" data-testid={getTestId('header')}>\n <div>\n <h2 className=\"m-0 text-lg font-medium text-base-content\">\n {locale.monthsLong[month]} {year}\n </h2>\n </div>\n </div>\n )}\n\n {/* Weekday header */}\n <div className=\"grid grid-cols-7 border-b border-base-300\" data-testid={getTestId('weekday-header')}>\n {locale.daysShort.map((day, index) => (\n <div\n key={index}\n className=\"py-1 text-center text-xs font-medium uppercase text-base-content/60\"\n data-testid={getTestId(`weekday-${index}`)}\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid flex-1 grid-cols-7 grid-rows-6 border-l border-base-300\" data-testid={getTestId('grid')}>\n {generateCalendarGrid(year, month).map((dateObj, index) => {\n const dateEvents = getEventsForDate(events as T[], dateObj.date)\n const isPast = isPastDate(dateObj.date) && !isToday(dateObj.date)\n const isSelected = daySelector && isEqual(dateObj.date, selectedDate)\n const dateKey = `${dateObj.year}-${dateObj.month + 1}-${dateObj.day}`\n\n return (\n <div\n key={index}\n className={`\n relative cursor-pointer overflow-hidden border-b border-r border-base-300 p-1\n hover:bg-base-200\n ${!dateObj.isCurrentMonth ? 'bg-base-200' : ''}\n ${isToday(dateObj.date) ? 'bg-primary/10' : ''}\n ${isPast ? 'opacity-60' : ''}\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed' : ''}\n ${isSelected ? 'z-10 outline outline-2 outline-primary' : ''}\n `}\n data-testid={getTestId(`day-${dateKey}`)}\n onClick={() => {\n if (isPast && !allowPastInteraction) {\n return\n }\n\n if (daySelector) {\n setSelectedDate(dateObj.date)\n }\n\n setTimeout(() => {\n onDayClick?.(dateObj.date)\n }, 0)\n }}\n >\n {/* Date number */}\n <div className=\"mb-0.5 flex justify-center\">\n <span\n className={`\n flex items-center justify-center text-xs leading-none\n ${isToday(dateObj.date) ? 'font-bold text-primary' : 'text-base-content'}\n ${!dateObj.isCurrentMonth ? 'text-base-content/40' : ''}\n ${isPast && dateObj.isCurrentMonth ? 'text-base-content/40' : ''}\n `}\n data-testid={getTestId(`day-number-${dateKey}`)}\n >\n {dateObj.day}\n </span>\n </div>\n\n {/* Events container */}\n <div className=\"flex flex-col\">\n {dateEvents\n .slice(\n 0,\n dateEvents.length > maxEventsPerDay\n ? maxEventsPerDay - 1\n : maxEventsPerDay\n )\n .map((event, eventIndex) => (\n <div\n key={eventIndex}\n className={`\n flex cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none\n transition-colors hover:bg-base-content/5\n ${isFutureDate(event.date) ? 'text-base-content' : 'text-base-content'}\n ${event.strikethrough ? 'line-through' : ''}\n `}\n style={event.style}\n data-testid={getTestId(`event-${dateKey}-${eventIndex}`)}\n onClick={(e) => {\n e.stopPropagation()\n if (onEventClick) {\n onEventClick(event)\n }\n }}\n title={event.title}\n >\n <span\n className=\"mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: event.color }}\n />\n <span\n className={`overflow-hidden whitespace-nowrap ${ellipsis ? 'text-ellipsis' : ''}`}\n >\n {event.title}\n </span>\n </div>\n ))}\n {dateEvents.length > maxEventsPerDay && (\n <div\n className=\"cursor-pointer rounded px-1 py-0.5 text-[11px] text-base-content/60 hover:bg-base-content/5\"\n data-testid={getTestId(`more-${dateKey}`)}\n onClick={(e) => {\n e.stopPropagation()\n if (onMoreEventsClick) {\n onMoreEventsClick(dateObj.date, dateEvents)\n }\n }}\n >\n +{dateEvents.length - maxEventsPerDay + 1} {locale.moreText}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n) as <T extends CalendarEvent = CalendarEvent>(\n props: MonthCalendarProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(MonthCalendar as React.FC).displayName = 'MonthCalendar'\n"],"names":["defaultLocale","isToday","date","isEqual","a","b","acopy","bcopy","isFutureDate","today","checkDate","isPastDate","getEventsForDate","events","event","getDaysInMonth","year","month","getFirstDayOfMonth","generateCalendarGrid","daysInMonth","firstDayOfMonth","prevMonthDays","prevMonth","prevMonthYear","daysInPrevMonth","i","day","currentMonthDays","nextMonthDays","daysToAdd","nextMonth","nextMonthYear","MonthCalendar","forwardRef","maxEventsPerDay","onEventClick","onDayClick","onMoreEventsClick","header","daySelector","locale","ellipsis","allowPastInteraction","className","testId","rest","ref","selectedDate","setSelectedDate","useState","getTestId","suffix","jsxs","jsx","index","dateObj","dateEvents","isPast","isSelected","dateKey","eventIndex","e"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx as s, Fragment as
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
4
|
-
const
|
|
5
|
-
class
|
|
1
|
+
import { jsx as s, Fragment as C, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { useState as $, useEffect as y } from "react";
|
|
3
|
+
import x from "react-dom/client";
|
|
4
|
+
const c = "toast", h = "toast-top", u = "toast-bottom", v = "toast-start", f = "toast-end", w = "toast-center", b = "alert", N = "alert-success", z = "alert-error", R = "alert-info", k = "alert-warning", L = "btn", B = "btn-xs", M = "btn-ghost", T = "btn-circle";
|
|
5
|
+
class I {
|
|
6
6
|
notifications = [];
|
|
7
7
|
listeners = [];
|
|
8
8
|
container = null;
|
|
@@ -20,11 +20,11 @@ class M {
|
|
|
20
20
|
this.listeners.forEach((e) => e());
|
|
21
21
|
}
|
|
22
22
|
ensureContainer() {
|
|
23
|
-
this.container || (this.container = document.createElement("div"), document.body.appendChild(this.container), this.root =
|
|
23
|
+
this.container || (this.container = document.createElement("div"), document.body.appendChild(this.container), this.root = x.createRoot(this.container), this.root.render(/* @__PURE__ */ s(E, { manager: this })));
|
|
24
24
|
}
|
|
25
25
|
open(e) {
|
|
26
26
|
this.ensureContainer();
|
|
27
|
-
const o = e.key ?? `notification-${++this.idCounter}`, n = e.variant === "compact",
|
|
27
|
+
const o = e.key ?? `notification-${++this.idCounter}`, n = e.variant === "compact", a = {
|
|
28
28
|
...e,
|
|
29
29
|
id: o,
|
|
30
30
|
createdAt: Date.now(),
|
|
@@ -33,10 +33,10 @@ class M {
|
|
|
33
33
|
variant: e.variant ?? "default",
|
|
34
34
|
closable: e.closable ?? !n,
|
|
35
35
|
type: e.type ?? "info"
|
|
36
|
-
}, r = this.notifications.findIndex((
|
|
37
|
-
return r !== -1 ? this.notifications[r] =
|
|
36
|
+
}, r = this.notifications.findIndex((i) => i.id === o);
|
|
37
|
+
return r !== -1 ? this.notifications[r] = a : this.notifications.push(a), this.emit(), a.duration && a.duration > 0 && setTimeout(() => {
|
|
38
38
|
this.close(o);
|
|
39
|
-
},
|
|
39
|
+
}, a.duration * 1e3), o;
|
|
40
40
|
}
|
|
41
41
|
close(e) {
|
|
42
42
|
const o = this.notifications.find((n) => n.id === e);
|
|
@@ -58,9 +58,9 @@ class M {
|
|
|
58
58
|
this.notifications = [], this.emit();
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
function
|
|
62
|
-
const [, e] =
|
|
63
|
-
|
|
61
|
+
function E({ manager: t }) {
|
|
62
|
+
const [, e] = $({});
|
|
63
|
+
y(() => t.subscribe(() => {
|
|
64
64
|
e({});
|
|
65
65
|
}), [t]);
|
|
66
66
|
const o = t.getNotifications(), n = {
|
|
@@ -74,70 +74,78 @@ function T({ manager: t }) {
|
|
|
74
74
|
o.forEach((r) => {
|
|
75
75
|
n[r.placement].push(r);
|
|
76
76
|
});
|
|
77
|
-
const
|
|
78
|
-
topRight: `${
|
|
79
|
-
topLeft: `${
|
|
80
|
-
topCenter: `${
|
|
81
|
-
bottomRight: `${
|
|
82
|
-
bottomLeft: `${
|
|
83
|
-
bottomCenter: `${
|
|
77
|
+
const a = {
|
|
78
|
+
topRight: `${c} ${h} ${f} z-[9999]`,
|
|
79
|
+
topLeft: `${c} ${h} ${v} z-[9999]`,
|
|
80
|
+
topCenter: `${c} ${h} ${w} z-[9999]`,
|
|
81
|
+
bottomRight: `${c} ${u} ${f} z-[9999]`,
|
|
82
|
+
bottomLeft: `${c} ${u} ${v} z-[9999]`,
|
|
83
|
+
bottomCenter: `${c} ${u} ${w} z-[9999]`
|
|
84
84
|
};
|
|
85
|
-
return /* @__PURE__ */ s(
|
|
85
|
+
return /* @__PURE__ */ s(C, { children: Object.entries(n).map(([r, i]) => i.length === 0 ? null : /* @__PURE__ */ s(
|
|
86
86
|
"div",
|
|
87
87
|
{
|
|
88
|
-
className:
|
|
88
|
+
className: a[r],
|
|
89
89
|
role: "region",
|
|
90
90
|
"aria-live": "polite",
|
|
91
91
|
"aria-label": "Notifications",
|
|
92
|
-
children:
|
|
93
|
-
|
|
92
|
+
children: i.map((l) => /* @__PURE__ */ s(
|
|
93
|
+
A,
|
|
94
94
|
{
|
|
95
|
-
notification:
|
|
96
|
-
onClose: () => t.close(
|
|
95
|
+
notification: l,
|
|
96
|
+
onClose: () => t.close(l.id)
|
|
97
97
|
},
|
|
98
|
-
|
|
98
|
+
l.id
|
|
99
99
|
))
|
|
100
100
|
},
|
|
101
101
|
r
|
|
102
102
|
)) });
|
|
103
103
|
}
|
|
104
|
-
function
|
|
104
|
+
function A({ notification: t, onClose: e }) {
|
|
105
105
|
const o = t.variant === "compact", n = {
|
|
106
|
-
success:
|
|
107
|
-
error:
|
|
108
|
-
info:
|
|
109
|
-
warning:
|
|
110
|
-
},
|
|
106
|
+
success: N,
|
|
107
|
+
error: z,
|
|
108
|
+
info: R,
|
|
109
|
+
warning: k
|
|
110
|
+
}, a = {
|
|
111
111
|
success: /* @__PURE__ */ s("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ s("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }) }),
|
|
112
112
|
error: /* @__PURE__ */ s("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ s("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }) }),
|
|
113
113
|
info: /* @__PURE__ */ s("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ s("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }),
|
|
114
114
|
warning: /* @__PURE__ */ s("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ s("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) })
|
|
115
115
|
}, r = () => {
|
|
116
116
|
t.onClick && t.onClick();
|
|
117
|
-
},
|
|
117
|
+
}, i = typeof t.onClick == "function", l = i ? typeof t.message == "string" ? t.message : "Notification" : void 0, m = (d) => {
|
|
118
|
+
i && (d.key === "Enter" || d.key === " ") && (d.preventDefault(), r());
|
|
119
|
+
}, g = t.icon ?? a[t.type];
|
|
118
120
|
return o ? /* @__PURE__ */ s(
|
|
119
121
|
"div",
|
|
120
122
|
{
|
|
121
|
-
className: `${
|
|
123
|
+
className: `${b} ${n[t.type]} shadow-md py-2 px-4 cursor-pointer${t.className ? ` ${t.className}` : ""}`,
|
|
122
124
|
style: t.style,
|
|
123
125
|
"data-testid": t["data-testid"],
|
|
124
126
|
onClick: r,
|
|
127
|
+
onKeyDown: m,
|
|
128
|
+
tabIndex: i ? 0 : void 0,
|
|
129
|
+
"aria-label": l,
|
|
125
130
|
role: "alert",
|
|
126
|
-
children: /* @__PURE__ */
|
|
127
|
-
/* @__PURE__ */ s("span", { "aria-hidden": "true", children:
|
|
131
|
+
children: /* @__PURE__ */ p("div", { className: "flex items-center gap-2", children: [
|
|
132
|
+
/* @__PURE__ */ s("span", { "aria-hidden": "true", children: g }),
|
|
128
133
|
/* @__PURE__ */ s("span", { children: t.message })
|
|
129
134
|
] })
|
|
130
135
|
}
|
|
131
|
-
) : /* @__PURE__ */
|
|
136
|
+
) : /* @__PURE__ */ p(
|
|
132
137
|
"div",
|
|
133
138
|
{
|
|
134
|
-
className: `${
|
|
139
|
+
className: `${b} ${n[t.type]} shadow-lg cursor-pointer min-w-[300px] max-w-[400px] relative${t.className ? ` ${t.className}` : ""}`,
|
|
135
140
|
style: t.style,
|
|
136
141
|
"data-testid": t["data-testid"],
|
|
137
142
|
onClick: r,
|
|
143
|
+
onKeyDown: m,
|
|
144
|
+
tabIndex: i ? 0 : void 0,
|
|
145
|
+
"aria-label": l,
|
|
138
146
|
role: "alert",
|
|
139
147
|
children: [
|
|
140
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ p("div", { className: t.closable ? "pr-8" : "", children: [
|
|
141
149
|
t.message && /* @__PURE__ */ s("div", { className: "font-bold", children: t.message }),
|
|
142
150
|
t.description && /* @__PURE__ */ s("div", { className: "text-sm", children: t.description })
|
|
143
151
|
] }),
|
|
@@ -145,9 +153,9 @@ function k({ notification: t, onClose: e }) {
|
|
|
145
153
|
"button",
|
|
146
154
|
{
|
|
147
155
|
type: "button",
|
|
148
|
-
className: `${
|
|
149
|
-
onClick: (
|
|
150
|
-
|
|
156
|
+
className: `${L} ${B} ${M} ${T} absolute top-2 right-2`,
|
|
157
|
+
onClick: (d) => {
|
|
158
|
+
d.stopPropagation(), e();
|
|
151
159
|
},
|
|
152
160
|
"aria-label": "Close notification",
|
|
153
161
|
children: "✕"
|
|
@@ -157,8 +165,8 @@ function k({ notification: t, onClose: e }) {
|
|
|
157
165
|
}
|
|
158
166
|
);
|
|
159
167
|
}
|
|
160
|
-
const
|
|
168
|
+
const S = new I();
|
|
161
169
|
export {
|
|
162
|
-
|
|
170
|
+
S as notification
|
|
163
171
|
};
|
|
164
172
|
//# sourceMappingURL=Notification.js.map
|