asterui 0.12.48 → 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.
- package/dist/components/Alert.js +18 -18
- package/dist/components/Alert.js.map +1 -1
- package/dist/components/Anchor.js +53 -53
- package/dist/components/Anchor.js.map +1 -1
- package/dist/components/Autocomplete.js +115 -114
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Avatar.js +33 -32
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.js +99 -99
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumb.js +12 -11
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Browser.js +10 -10
- package/dist/components/Browser.js.map +1 -1
- package/dist/components/Button.js +80 -79
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.d.ts +2 -0
- package/dist/components/Card.js +111 -110
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Carousel.js +59 -59
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Cascader.js +175 -174
- package/dist/components/Cascader.js.map +1 -1
- package/dist/components/Chat.js +27 -27
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Checkbox.js +98 -97
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/Code.js +11 -11
- package/dist/components/Code.js.map +1 -1
- package/dist/components/Collapse.js +46 -46
- package/dist/components/Collapse.js.map +1 -1
- package/dist/components/ColorPicker.d.ts +1 -1
- package/dist/components/ColorPicker.js +93 -91
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/Command.d.ts +65 -0
- package/dist/components/Command.js +422 -0
- package/dist/components/Command.js.map +1 -0
- package/dist/components/ConfigProvider.d.ts +1 -1
- package/dist/components/ConfigProvider.js +9 -9
- package/dist/components/ConfigProvider.js.map +1 -1
- package/dist/components/ContextMenu.js +33 -33
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton.js +74 -73
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Countdown.js +60 -59
- package/dist/components/Countdown.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.js +54 -53
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Diff.js +10 -10
- package/dist/components/Diff.js.map +1 -1
- package/dist/components/Divider.js +21 -20
- package/dist/components/Divider.js.map +1 -1
- package/dist/components/Dock.js +28 -27
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/Drawer.js +43 -43
- package/dist/components/Drawer.js.map +1 -1
- package/dist/components/Dropdown.js +127 -127
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/Empty.js +16 -15
- package/dist/components/Empty.js.map +1 -1
- package/dist/components/Fieldset.js +11 -10
- package/dist/components/Fieldset.js.map +1 -1
- package/dist/components/FileInput.js +30 -29
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -1
- package/dist/components/Filter.js +32 -30
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/FloatButton.js +83 -83
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Footer.js +14 -13
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Form.js +133 -132
- package/dist/components/Form.js.map +1 -1
- package/dist/components/Hero.js +12 -11
- package/dist/components/Hero.js.map +1 -1
- package/dist/components/HoverGallery.js +7 -7
- package/dist/components/HoverGallery.js.map +1 -1
- package/dist/components/Image.js +40 -40
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Input.js +171 -169
- package/dist/components/Input.js.map +1 -1
- package/dist/components/InputNumber.js +84 -83
- package/dist/components/InputNumber.js.map +1 -1
- package/dist/components/Join.js +11 -10
- package/dist/components/Join.js.map +1 -1
- package/dist/components/Kbd.js +15 -15
- package/dist/components/Kbd.js.map +1 -1
- package/dist/components/Layout.js +66 -66
- package/dist/components/Layout.js.map +1 -1
- package/dist/components/List.d.ts +1 -1
- package/dist/components/List.js +75 -72
- package/dist/components/List.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -1
- package/dist/components/Loading.js +31 -29
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Mask.js +31 -31
- package/dist/components/Mask.js.map +1 -1
- package/dist/components/Mention.js +61 -61
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Menu.js +84 -84
- package/dist/components/Menu.js.map +1 -1
- package/dist/components/Message.js +30 -29
- package/dist/components/Message.js.map +1 -1
- package/dist/components/Modal.js +117 -116
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +31 -0
- package/dist/components/MonthCalendar.js +205 -0
- package/dist/components/MonthCalendar.js.map +1 -0
- package/dist/components/Navbar.js +25 -25
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/Notification.js +56 -55
- package/dist/components/Notification.js.map +1 -1
- package/dist/components/OTPInput.js +69 -68
- package/dist/components/OTPInput.js.map +1 -1
- package/dist/components/Pagination.d.ts +1 -1
- package/dist/components/Pagination.js +60 -58
- package/dist/components/Pagination.js.map +1 -1
- package/dist/components/Phone.js +10 -10
- package/dist/components/Phone.js.map +1 -1
- package/dist/components/Popconfirm.js +60 -60
- package/dist/components/Popconfirm.js.map +1 -1
- package/dist/components/Progress.js +17 -17
- package/dist/components/Progress.js.map +1 -1
- package/dist/components/QRCode.js +23 -23
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.js +17 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Radio.js +41 -40
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/Range.d.ts +1 -1
- package/dist/components/Range.js +39 -37
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.js +79 -78
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/ResponsiveDrawer.js +27 -27
- package/dist/components/ResponsiveDrawer.js.map +1 -1
- package/dist/components/RichTextEditor.d.ts +32 -0
- package/dist/components/RichTextEditor.js +335 -0
- package/dist/components/RichTextEditor.js.map +1 -0
- package/dist/components/Segmented.d.ts +1 -1
- package/dist/components/Segmented.js +48 -46
- package/dist/components/Segmented.js.map +1 -1
- package/dist/components/Select.js +55 -54
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Skeleton.js +9 -9
- package/dist/components/Skeleton.js.map +1 -1
- package/dist/components/Splitter.js +93 -93
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.js +17 -16
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Status.js +29 -29
- package/dist/components/Status.js.map +1 -1
- package/dist/components/Steps.js +61 -61
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/Table.js +256 -256
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tabs.js +65 -65
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.js +147 -147
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/TextRotate.js +6 -6
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.js +35 -34
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +1 -1
- package/dist/components/ThemeController.js +71 -68
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/TimePicker.d.ts +1 -1
- package/dist/components/TimePicker.js +133 -129
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Timeline.js +79 -79
- package/dist/components/Timeline.js.map +1 -1
- package/dist/components/Toggle.js +33 -32
- package/dist/components/Toggle.js.map +1 -1
- package/dist/components/Tooltip.js +25 -25
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Tour.js +126 -126
- package/dist/components/Tour.js.map +1 -1
- package/dist/components/Transfer.js +93 -92
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/Tree.js +200 -200
- package/dist/components/Tree.js.map +1 -1
- package/dist/components/TreeSelect.js +255 -254
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/components/Typography.js +71 -70
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/Upload.js +81 -81
- package/dist/components/Upload.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +35 -0
- package/dist/components/WeekCalendar.js +204 -0
- package/dist/components/WeekCalendar.js.map +1 -0
- package/dist/components/Window.js +7 -7
- package/dist/components/Window.js.map +1 -1
- package/dist/editor.d.ts +1 -0
- package/dist/editor.js +5 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +221 -215
- package/dist/index.js.map +1 -1
- package/package.json +30 -1
package/dist/components/Alert.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
-
const m = ({
|
|
3
|
-
children:
|
|
4
|
-
className:
|
|
2
|
+
const d = "alert", f = "alert-info", A = "alert-success", u = "alert-warning", g = "alert-error", m = "alert-outline", p = "alert-dash", h = "alert-soft", j = "alert-vertical", x = ({
|
|
3
|
+
children: t,
|
|
4
|
+
className: r = "",
|
|
5
5
|
type: e,
|
|
6
|
-
outline:
|
|
6
|
+
outline: s = !1,
|
|
7
7
|
dash: l = !1,
|
|
8
|
-
soft:
|
|
9
|
-
vertical:
|
|
8
|
+
soft: o = !1,
|
|
9
|
+
vertical: a = !1,
|
|
10
10
|
...n
|
|
11
11
|
}) => {
|
|
12
12
|
const c = [
|
|
13
|
-
|
|
13
|
+
d,
|
|
14
14
|
e && {
|
|
15
|
-
info:
|
|
16
|
-
success:
|
|
17
|
-
warning:
|
|
18
|
-
error:
|
|
15
|
+
info: f,
|
|
16
|
+
success: A,
|
|
17
|
+
warning: u,
|
|
18
|
+
error: g
|
|
19
19
|
}[e],
|
|
20
|
-
|
|
21
|
-
l &&
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
s && m,
|
|
21
|
+
l && p,
|
|
22
|
+
o && h,
|
|
23
|
+
a && j,
|
|
24
|
+
r
|
|
25
25
|
].filter(Boolean).join(" ");
|
|
26
|
-
return /* @__PURE__ */ i("div", { role: "alert", className: c, ...n, children:
|
|
26
|
+
return /* @__PURE__ */ i("div", { role: "alert", className: c, ...n, children: t });
|
|
27
27
|
};
|
|
28
28
|
export {
|
|
29
|
-
|
|
29
|
+
x as Alert
|
|
30
30
|
};
|
|
31
31
|
//# sourceMappingURL=Alert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","sources":["../../src/components/Alert.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n type?: 'info' | 'success' | 'warning' | 'error'\n outline?: boolean\n dash?: boolean\n soft?: boolean\n vertical?: boolean\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n className = '',\n type,\n outline = false,\n dash = false,\n soft = false,\n vertical = false,\n ...rest\n}) => {\n const typeClasses = {\n info:
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../src/components/Alert.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dAlert = 'alert'\nconst dAlertInfo = 'alert-info'\nconst dAlertSuccess = 'alert-success'\nconst dAlertWarning = 'alert-warning'\nconst dAlertError = 'alert-error'\nconst dAlertOutline = 'alert-outline'\nconst dAlertDash = 'alert-dash'\nconst dAlertSoft = 'alert-soft'\nconst dAlertVertical = 'alert-vertical'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n type?: 'info' | 'success' | 'warning' | 'error'\n outline?: boolean\n dash?: boolean\n soft?: boolean\n vertical?: boolean\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n className = '',\n type,\n outline = false,\n dash = false,\n soft = false,\n vertical = false,\n ...rest\n}) => {\n const typeClasses = {\n info: dAlertInfo,\n success: dAlertSuccess,\n warning: dAlertWarning,\n error: dAlertError,\n }\n\n const classes = [\n dAlert,\n type && typeClasses[type],\n outline && dAlertOutline,\n dash && dAlertDash,\n soft && dAlertSoft,\n vertical && dAlertVertical,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div role=\"alert\" className={classes} {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["dAlert","dAlertInfo","dAlertSuccess","dAlertWarning","dAlertError","dAlertOutline","dAlertDash","dAlertSoft","dAlertVertical","Alert","children","className","type","outline","dash","soft","vertical","rest","classes","jsx"],"mappings":";AAGA,MAAMA,IAAS,SACTC,IAAa,cACbC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAc,eACdC,IAAgB,iBAChBC,IAAa,cACbC,IAAa,cACbC,IAAiB,kBAWVC,IAA8B,CAAC;AAAA,EAC1C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,MAAM;AAQJ,QAAMC,IAAU;AAAA,IACdlB;AAAA,IACAY,KATkB;AAAA,MAClB,MAAMX;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,EAKaQ,CAAI;AAAA,IACxBC,KAAWR;AAAA,IACXS,KAAQR;AAAA,IACRS,KAAQR;AAAA,IACRS,KAAYR;AAAA,IACZG;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,SAAI,MAAK,SAAQ,WAAWD,GAAU,GAAGD,GACvC,UAAAP,GACH;AAEJ;"}
|
|
@@ -1,116 +1,116 @@
|
|
|
1
1
|
import { jsx as a, jsxs as W } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
3
|
-
const
|
|
4
|
-
const o = Z(
|
|
2
|
+
import { useState as C, useRef as V, useCallback as $, useEffect as E, createContext as X, useContext as Z } from "react";
|
|
3
|
+
const _ = "text-primary", O = "border-primary", tt = "text-base-content", et = "hover:text-base-content", nt = "hover:border-base-content", ot = "bg-base-100", R = X(null), rt = () => {
|
|
4
|
+
const o = Z(R);
|
|
5
5
|
if (!o)
|
|
6
6
|
throw new Error("Anchor.Link must be used within an Anchor");
|
|
7
7
|
return o;
|
|
8
8
|
}, Y = ({
|
|
9
9
|
href: o,
|
|
10
10
|
title: h,
|
|
11
|
-
children:
|
|
12
|
-
className:
|
|
11
|
+
children: r,
|
|
12
|
+
className: x = ""
|
|
13
13
|
}) => {
|
|
14
|
-
const { activeLink:
|
|
15
|
-
|
|
16
|
-
const v =
|
|
14
|
+
const { activeLink: c, direction: f, registerLink: l, unregisterLink: w, handleClick: k } = rt();
|
|
15
|
+
E(() => (l(o), () => w(o)), [o, l, w]);
|
|
16
|
+
const v = c === o, d = f === "vertical";
|
|
17
17
|
return /* @__PURE__ */ W("div", { className: d ? "" : "inline-block", children: [
|
|
18
18
|
/* @__PURE__ */ a(
|
|
19
19
|
"a",
|
|
20
20
|
{
|
|
21
21
|
href: `#${o}`,
|
|
22
|
-
onClick: (b) =>
|
|
22
|
+
onClick: (b) => k(b, o, h),
|
|
23
23
|
className: `
|
|
24
24
|
block text-sm transition-colors
|
|
25
25
|
${d ? "py-1 pl-3 border-l-2" : "px-3 py-1 border-b-2"}
|
|
26
|
-
${v ?
|
|
27
|
-
${
|
|
26
|
+
${v ? `${_} ${O} font-medium` : `${tt}/70 border-transparent ${et} ${nt}/30`}
|
|
27
|
+
${x}
|
|
28
28
|
`.trim(),
|
|
29
29
|
children: h
|
|
30
30
|
}
|
|
31
31
|
),
|
|
32
|
-
|
|
32
|
+
r && /* @__PURE__ */ a("div", { className: d ? "pl-3" : "inline-flex", children: r })
|
|
33
33
|
] });
|
|
34
|
-
},
|
|
34
|
+
}, ct = ({
|
|
35
35
|
items: o,
|
|
36
36
|
direction: h = "vertical",
|
|
37
|
-
offsetTop:
|
|
38
|
-
bounds:
|
|
39
|
-
getContainer:
|
|
40
|
-
getCurrentAnchor:
|
|
37
|
+
offsetTop: r = 0,
|
|
38
|
+
bounds: x = 5,
|
|
39
|
+
getContainer: c,
|
|
40
|
+
getCurrentAnchor: f,
|
|
41
41
|
onChange: l,
|
|
42
42
|
onClick: w,
|
|
43
|
-
activeLink:
|
|
43
|
+
activeLink: k,
|
|
44
44
|
affix: v = !1,
|
|
45
45
|
affixOffsetTop: d = 0,
|
|
46
46
|
replace: b = !1,
|
|
47
47
|
className: D = "",
|
|
48
48
|
children: q
|
|
49
49
|
}) => {
|
|
50
|
-
const [F,
|
|
51
|
-
|
|
52
|
-
}, []), M =
|
|
53
|
-
|
|
54
|
-
}, []),
|
|
55
|
-
const t = document.getElementById(
|
|
50
|
+
const [F, T] = C(""), [i, H] = C([]), [m, G] = C(!1), p = V(null), A = V(null), g = k !== void 0, B = g ? k : F, J = f ? f(B) : B, K = $((e) => {
|
|
51
|
+
H((t) => t.includes(e) ? t : [...t, e]);
|
|
52
|
+
}, []), M = $((e) => {
|
|
53
|
+
H((t) => t.filter((n) => n !== e));
|
|
54
|
+
}, []), N = $((e) => {
|
|
55
|
+
const t = document.getElementById(e);
|
|
56
56
|
if (t) {
|
|
57
|
-
const
|
|
58
|
-
|
|
57
|
+
const n = c?.() ?? window, s = t.getBoundingClientRect().top, u = n === window ? 0 : n.getBoundingClientRect().top, y = n === window ? window.scrollY : n.scrollTop, L = s - u + y - r;
|
|
58
|
+
n === window ? window.scrollTo({ top: L, behavior: "smooth" }) : n.scrollTo({ top: L, behavior: "smooth" }), b ? window.history.replaceState(null, "", `#${e}`) : window.history.pushState(null, "", `#${e}`);
|
|
59
59
|
}
|
|
60
|
-
}, [
|
|
61
|
-
|
|
62
|
-
}, [w,
|
|
63
|
-
|
|
60
|
+
}, [c, r, b]), Q = $((e, t, n) => {
|
|
61
|
+
e.preventDefault(), w?.(e, { href: t, title: n }), N(t), g || T(t), l?.(t);
|
|
62
|
+
}, [w, N, g, l]);
|
|
63
|
+
E(() => {
|
|
64
64
|
if (!v || !p.current) return;
|
|
65
|
-
const
|
|
66
|
-
if (!p.current || !
|
|
67
|
-
const
|
|
65
|
+
const e = c?.() ?? window, t = () => {
|
|
66
|
+
if (!p.current || !A.current) return;
|
|
67
|
+
const n = A.current.getBoundingClientRect(), s = e === window ? 0 : e.getBoundingClientRect().top, u = n.top - s <= d;
|
|
68
68
|
u !== m && G(u);
|
|
69
69
|
};
|
|
70
|
-
return
|
|
71
|
-
}, [v, d,
|
|
70
|
+
return e.addEventListener("scroll", t, { passive: !0 }), t(), () => e.removeEventListener("scroll", t);
|
|
71
|
+
}, [v, d, c, m]), E(() => {
|
|
72
72
|
if (i.length === 0) return;
|
|
73
|
-
const
|
|
74
|
-
let
|
|
75
|
-
const s =
|
|
76
|
-
if (
|
|
77
|
-
|
|
73
|
+
const e = c?.() ?? window, t = () => {
|
|
74
|
+
let n = "";
|
|
75
|
+
const s = e === window ? document.documentElement : e, u = e === window ? 0 : s.getBoundingClientRect().top, y = e === window ? window.scrollY : s.scrollTop, L = s.scrollHeight, U = e === window ? window.innerHeight : s.clientHeight;
|
|
76
|
+
if (y + U >= L - 10 && i.length > 0)
|
|
77
|
+
n = i[i.length - 1];
|
|
78
78
|
else {
|
|
79
|
-
for (const
|
|
80
|
-
const
|
|
81
|
-
|
|
79
|
+
for (const j of i) {
|
|
80
|
+
const z = document.getElementById(j);
|
|
81
|
+
z && z.getBoundingClientRect().top - u - r <= x && (n = j);
|
|
82
82
|
}
|
|
83
|
-
!
|
|
83
|
+
!n && i.length > 0 && (n = i[0]);
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
n && n !== B && (g || T(n), l?.(n));
|
|
86
86
|
};
|
|
87
|
-
return
|
|
88
|
-
}, [i,
|
|
87
|
+
return e.addEventListener("scroll", t, { passive: !0 }), t(), () => e.removeEventListener("scroll", t);
|
|
88
|
+
}, [i, c, r, x, B, g, l]);
|
|
89
89
|
const I = {
|
|
90
90
|
activeLink: J,
|
|
91
91
|
direction: h,
|
|
92
|
-
offsetTop:
|
|
92
|
+
offsetTop: r,
|
|
93
93
|
registerLink: K,
|
|
94
94
|
unregisterLink: M,
|
|
95
95
|
handleClick: Q
|
|
96
|
-
}, S = (
|
|
96
|
+
}, S = (e) => e.map((t) => /* @__PURE__ */ a(Y, { href: t.href, title: t.title, children: t.children && S(t.children) }, t.href)), P = /* @__PURE__ */ a(
|
|
97
97
|
"nav",
|
|
98
98
|
{
|
|
99
99
|
ref: p,
|
|
100
100
|
className: `
|
|
101
101
|
${h === "horizontal" ? "flex items-center" : "flex flex-col"}
|
|
102
|
-
${m ?
|
|
102
|
+
${m ? `fixed ${ot} shadow-sm z-10` : ""}
|
|
103
103
|
${D}
|
|
104
104
|
`.trim(),
|
|
105
105
|
style: m ? { top: d } : void 0,
|
|
106
106
|
children: o ? S(o) : q
|
|
107
107
|
}
|
|
108
108
|
);
|
|
109
|
-
return v ? /* @__PURE__ */ a(
|
|
110
|
-
},
|
|
109
|
+
return v ? /* @__PURE__ */ a(R.Provider, { value: I, children: /* @__PURE__ */ a("div", { ref: A, style: m && p.current ? { height: p.current.offsetHeight } : void 0, children: P }) }) : /* @__PURE__ */ a(R.Provider, { value: I, children: P });
|
|
110
|
+
}, ut = Object.assign(ct, {
|
|
111
111
|
Link: Y
|
|
112
112
|
});
|
|
113
113
|
export {
|
|
114
|
-
|
|
114
|
+
ut as Anchor
|
|
115
115
|
};
|
|
116
116
|
//# sourceMappingURL=Anchor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Anchor.js","sources":["../../src/components/Anchor.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, createContext, useContext, useRef } from 'react'\n\nexport interface AnchorLinkItem {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: AnchorLinkItem[]\n}\n\nexport interface AnchorProps {\n /** Anchor links (alternative to Anchor.Link children) */\n items?: AnchorLinkItem[]\n /** Layout direction */\n direction?: 'horizontal' | 'vertical'\n /** Offset from top when calculating scroll position */\n offsetTop?: number\n /** Bounding distance of anchor area */\n bounds?: number\n /** Target scroll container (default: window) */\n getContainer?: () => HTMLElement | Window\n /** Customize the anchor highlight */\n getCurrentAnchor?: (activeLink: string) => string\n /** Callback when active link changes */\n onChange?: (activeLink: string) => void\n /** Callback when link is clicked */\n onClick?: (e: React.MouseEvent, link: { href: string; title: React.ReactNode }) => void\n /** Currently active link (controlled) */\n activeLink?: string\n /** Whether to fix the anchor when scrolling */\n affix?: boolean\n /** Pixels to offset from top when affix is true */\n affixOffsetTop?: number\n /** Replace history instead of push */\n replace?: boolean\n /** Custom class name */\n className?: string\n /** Anchor.Link children */\n children?: React.ReactNode\n}\n\nexport interface AnchorLinkProps {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: React.ReactNode\n /** Custom class name */\n className?: string\n}\n\ninterface AnchorContextValue {\n activeLink: string\n direction: 'horizontal' | 'vertical'\n offsetTop: number\n registerLink: (href: string) => void\n unregisterLink: (href: string) => void\n handleClick: (e: React.MouseEvent, href: string, title: React.ReactNode) => void\n}\n\nconst AnchorContext = createContext<AnchorContextValue | null>(null)\n\nconst useAnchorContext = () => {\n const context = useContext(AnchorContext)\n if (!context) {\n throw new Error('Anchor.Link must be used within an Anchor')\n }\n return context\n}\n\nconst AnchorLink: React.FC<AnchorLinkProps> = ({\n href,\n title,\n children,\n className = '',\n}) => {\n const { activeLink, direction, registerLink, unregisterLink, handleClick } = useAnchorContext()\n\n useEffect(() => {\n registerLink(href)\n return () => unregisterLink(href)\n }, [href, registerLink, unregisterLink])\n\n const isActive = activeLink === href\n const isVertical = direction === 'vertical'\n\n return (\n <div className={isVertical ? '' : 'inline-block'}>\n <a\n href={`#${href}`}\n onClick={(e) => handleClick(e, href, title)}\n className={`\n block text-sm transition-colors\n ${isVertical ? 'py-1 pl-3 border-l-2' : 'px-3 py-1 border-b-2'}\n ${isActive\n ? 'text-primary border-primary font-medium'\n : 'text-base-content/70 border-transparent hover:text-base-content hover:border-base-content/30'\n }\n ${className}\n `.trim()}\n >\n {title}\n </a>\n {children && (\n <div className={isVertical ? 'pl-3' : 'inline-flex'}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nconst AnchorComponent: React.FC<AnchorProps> = ({\n items,\n direction = 'vertical',\n offsetTop = 0,\n bounds = 5,\n getContainer,\n getCurrentAnchor,\n onChange,\n onClick,\n activeLink: controlledActiveLink,\n affix = false,\n affixOffsetTop = 0,\n replace = false,\n className = '',\n children,\n}) => {\n const [internalActiveLink, setInternalActiveLink] = useState('')\n const [links, setLinks] = useState<string[]>([])\n const [isAffixed, setIsAffixed] = useState(false)\n const anchorRef = useRef<HTMLDivElement>(null)\n const placeholderRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledActiveLink !== undefined\n const rawActiveLink = isControlled ? controlledActiveLink : internalActiveLink\n const activeLink = getCurrentAnchor ? getCurrentAnchor(rawActiveLink) : rawActiveLink\n\n const registerLink = useCallback((href: string) => {\n setLinks((prev) => (prev.includes(href) ? prev : [...prev, href]))\n }, [])\n\n const unregisterLink = useCallback((href: string) => {\n setLinks((prev) => prev.filter((link) => link !== href))\n }, [])\n\n const scrollToTarget = useCallback((href: string) => {\n const target = document.getElementById(href)\n if (target) {\n const container = getContainer?.() ?? window\n const targetTop = target.getBoundingClientRect().top\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n const scrollTop = container === window\n ? window.scrollY\n : (container as HTMLElement).scrollTop\n\n const top = targetTop - containerTop + scrollTop - offsetTop\n\n if (container === window) {\n window.scrollTo({ top, behavior: 'smooth' })\n } else {\n (container as HTMLElement).scrollTo({ top, behavior: 'smooth' })\n }\n\n // Update URL hash\n if (replace) {\n window.history.replaceState(null, '', `#${href}`)\n } else {\n window.history.pushState(null, '', `#${href}`)\n }\n }\n }, [getContainer, offsetTop, replace])\n\n const handleClick = useCallback((\n e: React.MouseEvent,\n href: string,\n title: React.ReactNode\n ) => {\n e.preventDefault()\n onClick?.(e, { href, title })\n scrollToTarget(href)\n\n if (!isControlled) {\n setInternalActiveLink(href)\n }\n onChange?.(href)\n }, [onClick, scrollToTarget, isControlled, onChange])\n\n // Affix logic\n useEffect(() => {\n if (!affix || !anchorRef.current) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n if (!anchorRef.current || !placeholderRef.current) return\n\n const placeholderRect = placeholderRef.current.getBoundingClientRect()\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n\n const shouldAffix = placeholderRect.top - containerTop <= affixOffsetTop\n\n if (shouldAffix !== isAffixed) {\n setIsAffixed(shouldAffix)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll()\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [affix, affixOffsetTop, getContainer, isAffixed])\n\n // Scroll spy\n useEffect(() => {\n if (links.length === 0) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n let currentActive = ''\n const containerEl = container === window ? document.documentElement : container as HTMLElement\n const containerTop = container === window\n ? 0\n : containerEl.getBoundingClientRect().top\n\n // Check if scrolled to near the bottom\n const scrollTop = container === window ? window.scrollY : containerEl.scrollTop\n const scrollHeight = containerEl.scrollHeight\n const clientHeight = container === window ? window.innerHeight : containerEl.clientHeight\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10\n\n // If near bottom, use the last link\n if (isNearBottom && links.length > 0) {\n currentActive = links[links.length - 1]\n } else {\n // Find the last element that has scrolled past the top (standard scroll spy behavior)\n for (const href of links) {\n const element = document.getElementById(href)\n if (element) {\n const rect = element.getBoundingClientRect()\n const distance = rect.top - containerTop - offsetTop\n\n // If element's top is within bounds of the threshold, it's the current section\n if (distance <= bounds) {\n currentActive = href\n }\n }\n }\n\n // If nothing matched, use the first link\n if (!currentActive && links.length > 0) {\n currentActive = links[0]\n }\n }\n\n if (currentActive && currentActive !== rawActiveLink) {\n if (!isControlled) {\n setInternalActiveLink(currentActive)\n }\n onChange?.(currentActive)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll() // Initial check\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [links, getContainer, offsetTop, bounds, rawActiveLink, isControlled, onChange])\n\n const contextValue: AnchorContextValue = {\n activeLink,\n direction,\n offsetTop,\n registerLink,\n unregisterLink,\n handleClick,\n }\n\n const renderItems = (linkItems: AnchorLinkItem[]): React.ReactNode => {\n return linkItems.map((item) => (\n <AnchorLink key={item.href} href={item.href} title={item.title}>\n {item.children && renderItems(item.children)}\n </AnchorLink>\n ))\n }\n\n const anchorContent = (\n <nav\n ref={anchorRef}\n className={`\n ${direction === 'horizontal' ? 'flex items-center' : 'flex flex-col'}\n ${isAffixed ? 'fixed bg-base-100 shadow-sm z-10' : ''}\n ${className}\n `.trim()}\n style={isAffixed ? { top: affixOffsetTop } : undefined}\n >\n {items ? renderItems(items) : children}\n </nav>\n )\n\n if (affix) {\n return (\n <AnchorContext.Provider value={contextValue}>\n <div ref={placeholderRef} style={isAffixed && anchorRef.current ? { height: anchorRef.current.offsetHeight } : undefined}>\n {anchorContent}\n </div>\n </AnchorContext.Provider>\n )\n }\n\n return (\n <AnchorContext.Provider value={contextValue}>\n {anchorContent}\n </AnchorContext.Provider>\n )\n}\n\nexport const Anchor = Object.assign(AnchorComponent, {\n Link: AnchorLink,\n})\n"],"names":["AnchorContext","createContext","useAnchorContext","context","useContext","AnchorLink","href","title","children","className","activeLink","direction","registerLink","unregisterLink","handleClick","useEffect","isActive","isVertical","jsxs","jsx","e","AnchorComponent","items","offsetTop","bounds","getContainer","getCurrentAnchor","onChange","onClick","controlledActiveLink","affix","affixOffsetTop","replace","internalActiveLink","setInternalActiveLink","useState","links","setLinks","isAffixed","setIsAffixed","anchorRef","useRef","placeholderRef","isControlled","rawActiveLink","useCallback","prev","link","scrollToTarget","target","container","targetTop","containerTop","scrollTop","top","handleScroll","placeholderRect","shouldAffix","currentActive","containerEl","scrollHeight","clientHeight","element","contextValue","renderItems","linkItems","item","anchorContent","Anchor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Anchor.js","sources":["../../src/components/Anchor.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, createContext, useContext, useRef } from 'react'\n\n// DaisyUI classes\nconst dTextPrimary = 'text-primary'\nconst dBorderPrimary = 'border-primary'\nconst dTextBaseContent = 'text-base-content'\nconst dHoverTextBaseContent = 'hover:text-base-content'\nconst dHoverBorderBaseContent = 'hover:border-base-content'\nconst dBgBase100 = 'bg-base-100'\n\nexport interface AnchorLinkItem {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: AnchorLinkItem[]\n}\n\nexport interface AnchorProps {\n /** Anchor links (alternative to Anchor.Link children) */\n items?: AnchorLinkItem[]\n /** Layout direction */\n direction?: 'horizontal' | 'vertical'\n /** Offset from top when calculating scroll position */\n offsetTop?: number\n /** Bounding distance of anchor area */\n bounds?: number\n /** Target scroll container (default: window) */\n getContainer?: () => HTMLElement | Window\n /** Customize the anchor highlight */\n getCurrentAnchor?: (activeLink: string) => string\n /** Callback when active link changes */\n onChange?: (activeLink: string) => void\n /** Callback when link is clicked */\n onClick?: (e: React.MouseEvent, link: { href: string; title: React.ReactNode }) => void\n /** Currently active link (controlled) */\n activeLink?: string\n /** Whether to fix the anchor when scrolling */\n affix?: boolean\n /** Pixels to offset from top when affix is true */\n affixOffsetTop?: number\n /** Replace history instead of push */\n replace?: boolean\n /** Custom class name */\n className?: string\n /** Anchor.Link children */\n children?: React.ReactNode\n}\n\nexport interface AnchorLinkProps {\n /** Target element id (without #) */\n href: string\n /** Link title */\n title: React.ReactNode\n /** Nested links */\n children?: React.ReactNode\n /** Custom class name */\n className?: string\n}\n\ninterface AnchorContextValue {\n activeLink: string\n direction: 'horizontal' | 'vertical'\n offsetTop: number\n registerLink: (href: string) => void\n unregisterLink: (href: string) => void\n handleClick: (e: React.MouseEvent, href: string, title: React.ReactNode) => void\n}\n\nconst AnchorContext = createContext<AnchorContextValue | null>(null)\n\nconst useAnchorContext = () => {\n const context = useContext(AnchorContext)\n if (!context) {\n throw new Error('Anchor.Link must be used within an Anchor')\n }\n return context\n}\n\nconst AnchorLink: React.FC<AnchorLinkProps> = ({\n href,\n title,\n children,\n className = '',\n}) => {\n const { activeLink, direction, registerLink, unregisterLink, handleClick } = useAnchorContext()\n\n useEffect(() => {\n registerLink(href)\n return () => unregisterLink(href)\n }, [href, registerLink, unregisterLink])\n\n const isActive = activeLink === href\n const isVertical = direction === 'vertical'\n\n return (\n <div className={isVertical ? '' : 'inline-block'}>\n <a\n href={`#${href}`}\n onClick={(e) => handleClick(e, href, title)}\n className={`\n block text-sm transition-colors\n ${isVertical ? 'py-1 pl-3 border-l-2' : 'px-3 py-1 border-b-2'}\n ${isActive\n ? `${dTextPrimary} ${dBorderPrimary} font-medium`\n : `${dTextBaseContent}/70 border-transparent ${dHoverTextBaseContent} ${dHoverBorderBaseContent}/30`\n }\n ${className}\n `.trim()}\n >\n {title}\n </a>\n {children && (\n <div className={isVertical ? 'pl-3' : 'inline-flex'}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nconst AnchorComponent: React.FC<AnchorProps> = ({\n items,\n direction = 'vertical',\n offsetTop = 0,\n bounds = 5,\n getContainer,\n getCurrentAnchor,\n onChange,\n onClick,\n activeLink: controlledActiveLink,\n affix = false,\n affixOffsetTop = 0,\n replace = false,\n className = '',\n children,\n}) => {\n const [internalActiveLink, setInternalActiveLink] = useState('')\n const [links, setLinks] = useState<string[]>([])\n const [isAffixed, setIsAffixed] = useState(false)\n const anchorRef = useRef<HTMLDivElement>(null)\n const placeholderRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledActiveLink !== undefined\n const rawActiveLink = isControlled ? controlledActiveLink : internalActiveLink\n const activeLink = getCurrentAnchor ? getCurrentAnchor(rawActiveLink) : rawActiveLink\n\n const registerLink = useCallback((href: string) => {\n setLinks((prev) => (prev.includes(href) ? prev : [...prev, href]))\n }, [])\n\n const unregisterLink = useCallback((href: string) => {\n setLinks((prev) => prev.filter((link) => link !== href))\n }, [])\n\n const scrollToTarget = useCallback((href: string) => {\n const target = document.getElementById(href)\n if (target) {\n const container = getContainer?.() ?? window\n const targetTop = target.getBoundingClientRect().top\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n const scrollTop = container === window\n ? window.scrollY\n : (container as HTMLElement).scrollTop\n\n const top = targetTop - containerTop + scrollTop - offsetTop\n\n if (container === window) {\n window.scrollTo({ top, behavior: 'smooth' })\n } else {\n (container as HTMLElement).scrollTo({ top, behavior: 'smooth' })\n }\n\n // Update URL hash\n if (replace) {\n window.history.replaceState(null, '', `#${href}`)\n } else {\n window.history.pushState(null, '', `#${href}`)\n }\n }\n }, [getContainer, offsetTop, replace])\n\n const handleClick = useCallback((\n e: React.MouseEvent,\n href: string,\n title: React.ReactNode\n ) => {\n e.preventDefault()\n onClick?.(e, { href, title })\n scrollToTarget(href)\n\n if (!isControlled) {\n setInternalActiveLink(href)\n }\n onChange?.(href)\n }, [onClick, scrollToTarget, isControlled, onChange])\n\n // Affix logic\n useEffect(() => {\n if (!affix || !anchorRef.current) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n if (!anchorRef.current || !placeholderRef.current) return\n\n const placeholderRect = placeholderRef.current.getBoundingClientRect()\n const containerTop = container === window\n ? 0\n : (container as HTMLElement).getBoundingClientRect().top\n\n const shouldAffix = placeholderRect.top - containerTop <= affixOffsetTop\n\n if (shouldAffix !== isAffixed) {\n setIsAffixed(shouldAffix)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll()\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [affix, affixOffsetTop, getContainer, isAffixed])\n\n // Scroll spy\n useEffect(() => {\n if (links.length === 0) return\n\n const container = getContainer?.() ?? window\n\n const handleScroll = () => {\n let currentActive = ''\n const containerEl = container === window ? document.documentElement : container as HTMLElement\n const containerTop = container === window\n ? 0\n : containerEl.getBoundingClientRect().top\n\n // Check if scrolled to near the bottom\n const scrollTop = container === window ? window.scrollY : containerEl.scrollTop\n const scrollHeight = containerEl.scrollHeight\n const clientHeight = container === window ? window.innerHeight : containerEl.clientHeight\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10\n\n // If near bottom, use the last link\n if (isNearBottom && links.length > 0) {\n currentActive = links[links.length - 1]\n } else {\n // Find the last element that has scrolled past the top (standard scroll spy behavior)\n for (const href of links) {\n const element = document.getElementById(href)\n if (element) {\n const rect = element.getBoundingClientRect()\n const distance = rect.top - containerTop - offsetTop\n\n // If element's top is within bounds of the threshold, it's the current section\n if (distance <= bounds) {\n currentActive = href\n }\n }\n }\n\n // If nothing matched, use the first link\n if (!currentActive && links.length > 0) {\n currentActive = links[0]\n }\n }\n\n if (currentActive && currentActive !== rawActiveLink) {\n if (!isControlled) {\n setInternalActiveLink(currentActive)\n }\n onChange?.(currentActive)\n }\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll() // Initial check\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [links, getContainer, offsetTop, bounds, rawActiveLink, isControlled, onChange])\n\n const contextValue: AnchorContextValue = {\n activeLink,\n direction,\n offsetTop,\n registerLink,\n unregisterLink,\n handleClick,\n }\n\n const renderItems = (linkItems: AnchorLinkItem[]): React.ReactNode => {\n return linkItems.map((item) => (\n <AnchorLink key={item.href} href={item.href} title={item.title}>\n {item.children && renderItems(item.children)}\n </AnchorLink>\n ))\n }\n\n const anchorContent = (\n <nav\n ref={anchorRef}\n className={`\n ${direction === 'horizontal' ? 'flex items-center' : 'flex flex-col'}\n ${isAffixed ? `fixed ${dBgBase100} shadow-sm z-10` : ''}\n ${className}\n `.trim()}\n style={isAffixed ? { top: affixOffsetTop } : undefined}\n >\n {items ? renderItems(items) : children}\n </nav>\n )\n\n if (affix) {\n return (\n <AnchorContext.Provider value={contextValue}>\n <div ref={placeholderRef} style={isAffixed && anchorRef.current ? { height: anchorRef.current.offsetHeight } : undefined}>\n {anchorContent}\n </div>\n </AnchorContext.Provider>\n )\n }\n\n return (\n <AnchorContext.Provider value={contextValue}>\n {anchorContent}\n </AnchorContext.Provider>\n )\n}\n\nexport const Anchor = Object.assign(AnchorComponent, {\n Link: AnchorLink,\n})\n"],"names":["dTextPrimary","dBorderPrimary","dTextBaseContent","dHoverTextBaseContent","dHoverBorderBaseContent","dBgBase100","AnchorContext","createContext","useAnchorContext","context","useContext","AnchorLink","href","title","children","className","activeLink","direction","registerLink","unregisterLink","handleClick","useEffect","isActive","isVertical","jsxs","jsx","e","AnchorComponent","items","offsetTop","bounds","getContainer","getCurrentAnchor","onChange","onClick","controlledActiveLink","affix","affixOffsetTop","replace","internalActiveLink","setInternalActiveLink","useState","links","setLinks","isAffixed","setIsAffixed","anchorRef","useRef","placeholderRef","isControlled","rawActiveLink","useCallback","prev","link","scrollToTarget","target","container","targetTop","containerTop","scrollTop","top","handleScroll","placeholderRect","shouldAffix","currentActive","containerEl","scrollHeight","clientHeight","element","contextValue","renderItems","linkItems","item","anchorContent","Anchor"],"mappings":"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"}
|
|
@@ -1,178 +1,179 @@
|
|
|
1
|
-
import { jsxs as M, jsx as
|
|
2
|
-
import { useId as
|
|
3
|
-
|
|
1
|
+
import { jsxs as M, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useId as de, useState as k, useRef as O, useEffect as z } from "react";
|
|
3
|
+
import { useConfig as ue } from "./ConfigProvider.js";
|
|
4
|
+
const pe = "dropdown", fe = "dropdown-bottom", he = "dropdown-open", be = "dropdown-content", me = "menu", Ie = "input", ge = "input-xs", we = "input-sm", xe = "input-md", ye = "input-lg", ve = "input-xl", Ce = "input-neutral", ke = "input-primary", De = "input-secondary", Ne = "input-accent", $e = "input-info", je = "input-success", A = "input-warning", R = "input-error", Ee = ({ onClick: l, className: I }) => /* @__PURE__ */ o(
|
|
4
5
|
"button",
|
|
5
6
|
{
|
|
6
7
|
type: "button",
|
|
7
|
-
onClick:
|
|
8
|
-
className: `flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${
|
|
8
|
+
onClick: l,
|
|
9
|
+
className: `flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${I || ""}`,
|
|
9
10
|
"aria-label": "Clear input",
|
|
10
11
|
tabIndex: -1,
|
|
11
|
-
children: /* @__PURE__ */
|
|
12
|
+
children: /* @__PURE__ */ o("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
12
13
|
}
|
|
13
|
-
),
|
|
14
|
-
value:
|
|
15
|
-
defaultValue:
|
|
16
|
-
onChange:
|
|
17
|
-
onSelect:
|
|
18
|
-
onSearch:
|
|
19
|
-
options:
|
|
20
|
-
placeholder:
|
|
14
|
+
), ze = ({
|
|
15
|
+
value: l,
|
|
16
|
+
defaultValue: I = "",
|
|
17
|
+
onChange: g,
|
|
18
|
+
onSelect: T,
|
|
19
|
+
onSearch: V,
|
|
20
|
+
options: K,
|
|
21
|
+
placeholder: P = "Type to search...",
|
|
21
22
|
disabled: p = !1,
|
|
22
|
-
size:
|
|
23
|
-
color:
|
|
24
|
-
status:
|
|
25
|
-
className:
|
|
26
|
-
allowCustomValue:
|
|
27
|
-
filterOption:
|
|
28
|
-
notFoundContent:
|
|
23
|
+
size: U,
|
|
24
|
+
color: D,
|
|
25
|
+
status: w,
|
|
26
|
+
className: W = "",
|
|
27
|
+
allowCustomValue: N = !0,
|
|
28
|
+
filterOption: $,
|
|
29
|
+
notFoundContent: X = "No results found",
|
|
29
30
|
allowClear: f,
|
|
30
|
-
onClear:
|
|
31
|
-
open:
|
|
32
|
-
defaultOpen:
|
|
33
|
-
onOpenChange:
|
|
34
|
-
defaultActiveFirstOption:
|
|
35
|
-
...
|
|
31
|
+
onClear: F,
|
|
32
|
+
open: j,
|
|
33
|
+
defaultOpen: H = !1,
|
|
34
|
+
onOpenChange: q,
|
|
35
|
+
defaultActiveFirstOption: x = !0,
|
|
36
|
+
...G
|
|
36
37
|
}) => {
|
|
37
|
-
const y =
|
|
38
|
+
const { componentSize: J } = ue(), Q = U ?? J ?? "md", y = de(), Y = `${y}-input`, E = `${y}-listbox`, v = K.map(
|
|
38
39
|
(e) => typeof e == "string" ? { value: e, label: e } : e
|
|
39
|
-
), [h, b] =
|
|
40
|
-
|
|
40
|
+
), [h, b] = k(I), [Z, _] = k(H), [t, r] = k(-1), m = O(null), i = O(null), S = j !== void 0, d = S ? j : Z, c = (e) => {
|
|
41
|
+
S || _(e), q?.(e);
|
|
41
42
|
};
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
const e =
|
|
45
|
-
b(e?.label ||
|
|
43
|
+
z(() => {
|
|
44
|
+
if (l !== void 0) {
|
|
45
|
+
const e = v.find((n) => n.value === l);
|
|
46
|
+
b(e?.label || l);
|
|
46
47
|
}
|
|
47
|
-
}, [
|
|
48
|
-
const
|
|
49
|
-
(e) =>
|
|
50
|
-
),
|
|
51
|
-
const
|
|
52
|
-
b(
|
|
53
|
-
},
|
|
54
|
-
e.disabled || (b(e.label),
|
|
55
|
-
},
|
|
56
|
-
if (!
|
|
57
|
-
|
|
48
|
+
}, [l, v]);
|
|
49
|
+
const ee = (e, n) => e.label.toLowerCase().includes(n.toLowerCase()), a = v.filter(
|
|
50
|
+
(e) => $ ? $(e, h) : ee(e, h)
|
|
51
|
+
), u = a.filter((e) => !e.disabled), ne = (e) => {
|
|
52
|
+
const n = e.target.value;
|
|
53
|
+
b(n), c(!0), x && u.length > 0 ? r(0) : r(-1), V?.(n), N && g?.(n);
|
|
54
|
+
}, C = (e) => {
|
|
55
|
+
e.disabled || (b(e.label), c(!1), r(-1), g?.(e.value), T?.(e.value, e), m.current?.focus());
|
|
56
|
+
}, te = (e) => {
|
|
57
|
+
if (!d && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
|
|
58
|
+
c(!0), x && u.length > 0 && r(0);
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
61
|
switch (e.key) {
|
|
61
62
|
case "ArrowDown":
|
|
62
|
-
e.preventDefault(),
|
|
63
|
-
for (let s =
|
|
64
|
-
if (!
|
|
65
|
-
return
|
|
63
|
+
e.preventDefault(), r((n) => {
|
|
64
|
+
for (let s = n + 1; s < a.length; s++)
|
|
65
|
+
if (!a[s].disabled) return s;
|
|
66
|
+
return n;
|
|
66
67
|
});
|
|
67
68
|
break;
|
|
68
69
|
case "ArrowUp":
|
|
69
|
-
e.preventDefault(),
|
|
70
|
-
for (let s =
|
|
71
|
-
if (!
|
|
72
|
-
return
|
|
70
|
+
e.preventDefault(), r((n) => {
|
|
71
|
+
for (let s = n - 1; s >= 0; s--)
|
|
72
|
+
if (!a[s].disabled) return s;
|
|
73
|
+
return n;
|
|
73
74
|
});
|
|
74
75
|
break;
|
|
75
76
|
case "Enter":
|
|
76
|
-
e.preventDefault(),
|
|
77
|
+
e.preventDefault(), t >= 0 && a[t] && !a[t].disabled ? C(a[t]) : !N && u.length > 0 && C(u[0]);
|
|
77
78
|
break;
|
|
78
79
|
case "Escape":
|
|
79
|
-
|
|
80
|
+
c(!1), r(-1), m.current?.blur();
|
|
80
81
|
break;
|
|
81
82
|
}
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
},
|
|
87
|
-
e.stopPropagation(), b(""),
|
|
88
|
-
},
|
|
89
|
-
xs:
|
|
90
|
-
sm:
|
|
91
|
-
md:
|
|
92
|
-
lg:
|
|
93
|
-
xl:
|
|
94
|
-
},
|
|
95
|
-
error:
|
|
96
|
-
warning:
|
|
97
|
-
}[
|
|
98
|
-
neutral:
|
|
99
|
-
primary:
|
|
100
|
-
secondary:
|
|
101
|
-
accent:
|
|
102
|
-
info:
|
|
103
|
-
success:
|
|
104
|
-
warning:
|
|
105
|
-
error:
|
|
106
|
-
}[
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}, [
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
83
|
+
}, se = () => {
|
|
84
|
+
c(!0), x && u.length > 0 && r(0);
|
|
85
|
+
}, oe = (e) => {
|
|
86
|
+
i.current && i.current.contains(e.relatedTarget) || setTimeout(() => c(!1), 200);
|
|
87
|
+
}, re = (e) => {
|
|
88
|
+
e.stopPropagation(), b(""), g?.(""), F?.(), m.current?.focus();
|
|
89
|
+
}, ae = {
|
|
90
|
+
xs: ge,
|
|
91
|
+
sm: we,
|
|
92
|
+
md: xe,
|
|
93
|
+
lg: ye,
|
|
94
|
+
xl: ve
|
|
95
|
+
}, le = w ? {
|
|
96
|
+
error: R,
|
|
97
|
+
warning: A
|
|
98
|
+
}[w] : D ? {
|
|
99
|
+
neutral: Ce,
|
|
100
|
+
primary: ke,
|
|
101
|
+
secondary: De,
|
|
102
|
+
accent: Ne,
|
|
103
|
+
info: $e,
|
|
104
|
+
success: je,
|
|
105
|
+
warning: A,
|
|
106
|
+
error: R
|
|
107
|
+
}[D] : "";
|
|
108
|
+
z(() => {
|
|
109
|
+
t >= 0 && i.current && i.current.children[t]?.scrollIntoView({ block: "nearest" });
|
|
110
|
+
}, [t]);
|
|
111
|
+
const B = f && h && !p, ce = typeof f == "object" && f.clearIcon ? f.clearIcon : null, L = (e) => `${y}-option-${e}`, ie = [
|
|
112
|
+
`${Ie} w-full`,
|
|
113
|
+
ae[Q],
|
|
114
|
+
le,
|
|
115
|
+
B && "pr-10"
|
|
115
116
|
].filter(Boolean).join(" ");
|
|
116
117
|
return /* @__PURE__ */ M(
|
|
117
118
|
"div",
|
|
118
119
|
{
|
|
119
|
-
className:
|
|
120
|
-
"data-state":
|
|
121
|
-
...
|
|
120
|
+
className: `${pe} ${fe} w-full ${d && !p ? he : ""} ${W}`,
|
|
121
|
+
"data-state": d ? "open" : "closed",
|
|
122
|
+
...G,
|
|
122
123
|
children: [
|
|
123
124
|
/* @__PURE__ */ M("div", { className: "relative w-full", children: [
|
|
124
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ o(
|
|
125
126
|
"input",
|
|
126
127
|
{
|
|
127
128
|
ref: m,
|
|
128
|
-
id:
|
|
129
|
+
id: Y,
|
|
129
130
|
type: "text",
|
|
130
131
|
role: "combobox",
|
|
131
|
-
"aria-expanded":
|
|
132
|
+
"aria-expanded": d,
|
|
132
133
|
"aria-haspopup": "listbox",
|
|
133
134
|
"aria-controls": E,
|
|
134
135
|
"aria-autocomplete": "list",
|
|
135
|
-
"aria-activedescendant":
|
|
136
|
-
"aria-invalid":
|
|
136
|
+
"aria-activedescendant": t >= 0 ? L(t) : void 0,
|
|
137
|
+
"aria-invalid": w === "error" ? !0 : void 0,
|
|
137
138
|
value: h,
|
|
138
|
-
onChange:
|
|
139
|
-
onKeyDown:
|
|
140
|
-
onFocus:
|
|
141
|
-
onBlur:
|
|
142
|
-
placeholder:
|
|
139
|
+
onChange: ne,
|
|
140
|
+
onKeyDown: te,
|
|
141
|
+
onFocus: se,
|
|
142
|
+
onBlur: oe,
|
|
143
|
+
placeholder: P,
|
|
143
144
|
disabled: p,
|
|
144
|
-
className:
|
|
145
|
+
className: ie
|
|
145
146
|
}
|
|
146
147
|
),
|
|
147
|
-
|
|
148
|
+
B && /* @__PURE__ */ o("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 z-10", children: ce || /* @__PURE__ */ o(Ee, { onClick: re }) })
|
|
148
149
|
] }),
|
|
149
|
-
|
|
150
|
+
d && !p && /* @__PURE__ */ o(
|
|
150
151
|
"ul",
|
|
151
152
|
{
|
|
152
|
-
ref:
|
|
153
|
+
ref: i,
|
|
153
154
|
id: E,
|
|
154
155
|
role: "listbox",
|
|
155
156
|
"aria-label": "Suggestions",
|
|
156
157
|
tabIndex: -1,
|
|
157
|
-
className:
|
|
158
|
-
children:
|
|
158
|
+
className: `${be} ${me} bg-base-100 rounded-box z-50 w-full shadow-lg border border-base-300 max-h-60 overflow-auto flex-nowrap`,
|
|
159
|
+
children: a.length > 0 ? a.map((e, n) => /* @__PURE__ */ o("li", { children: /* @__PURE__ */ o(
|
|
159
160
|
"a",
|
|
160
161
|
{
|
|
161
|
-
id:
|
|
162
|
+
id: L(n),
|
|
162
163
|
role: "option",
|
|
163
|
-
"aria-selected":
|
|
164
|
+
"aria-selected": t === n,
|
|
164
165
|
"aria-disabled": e.disabled,
|
|
165
166
|
onMouseDown: (s) => {
|
|
166
|
-
s.preventDefault(),
|
|
167
|
+
s.preventDefault(), C(e);
|
|
167
168
|
},
|
|
168
|
-
onMouseEnter: () => !e.disabled &&
|
|
169
|
+
onMouseEnter: () => !e.disabled && r(n),
|
|
169
170
|
className: [
|
|
170
|
-
|
|
171
|
+
n === t && !e.disabled && "active",
|
|
171
172
|
e.disabled && "disabled text-base-content/40 cursor-not-allowed"
|
|
172
173
|
].filter(Boolean).join(" "),
|
|
173
174
|
children: e.label
|
|
174
175
|
}
|
|
175
|
-
) }, e.value)) : /* @__PURE__ */
|
|
176
|
+
) }, e.value)) : /* @__PURE__ */ o("li", { className: "disabled", children: /* @__PURE__ */ o("span", { className: "text-base-content/60 text-center cursor-default", children: X }) })
|
|
176
177
|
}
|
|
177
178
|
)
|
|
178
179
|
]
|
|
@@ -180,6 +181,6 @@ const oe = ({ onClick: o, className: g }) => /* @__PURE__ */ r(
|
|
|
180
181
|
);
|
|
181
182
|
};
|
|
182
183
|
export {
|
|
183
|
-
|
|
184
|
+
ze as Autocomplete
|
|
184
185
|
};
|
|
185
186
|
//# sourceMappingURL=Autocomplete.js.map
|