asterui 0.10.2
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/LICENSE +15 -0
- package/README.md +214 -0
- package/dist/components/Affix.d.ts +14 -0
- package/dist/components/Alert.d.ts +10 -0
- package/dist/components/Autocomplete.d.ts +18 -0
- package/dist/components/Avatar.d.ts +28 -0
- package/dist/components/Badge.d.ts +20 -0
- package/dist/components/Breadcrumb.d.ts +15 -0
- package/dist/components/Browser.d.ts +7 -0
- package/dist/components/Button.d.ts +23 -0
- package/dist/components/Card.d.ts +26 -0
- package/dist/components/Carousel.d.ts +14 -0
- package/dist/components/Cascader.d.ts +19 -0
- package/dist/components/Chart.d.ts +19 -0
- package/dist/components/Chat.d.ts +11 -0
- package/dist/components/Checkbox.d.ts +27 -0
- package/dist/components/Code.d.ts +14 -0
- package/dist/components/Collapse.d.ts +25 -0
- package/dist/components/ColorPicker.d.ts +10 -0
- package/dist/components/Container.d.ts +6 -0
- package/dist/components/ContextMenu.d.ts +23 -0
- package/dist/components/Countdown.d.ts +27 -0
- package/dist/components/DatePicker.d.ts +11 -0
- package/dist/components/Descriptions.d.ts +34 -0
- package/dist/components/Divider.d.ts +8 -0
- package/dist/components/Drawer.d.ts +10 -0
- package/dist/components/Dropdown.d.ts +39 -0
- package/dist/components/Empty.d.ts +8 -0
- package/dist/components/Fieldset.d.ts +15 -0
- package/dist/components/FileInput.d.ts +9 -0
- package/dist/components/Flex.d.ts +14 -0
- package/dist/components/FloatButton.d.ts +34 -0
- package/dist/components/Footer.d.ts +16 -0
- package/dist/components/Form.d.ts +66 -0
- package/dist/components/Grid.d.ts +26 -0
- package/dist/components/Hero.d.ts +9 -0
- package/dist/components/Image.d.ts +14 -0
- package/dist/components/Indicator.d.ts +7 -0
- package/dist/components/Input.d.ts +14 -0
- package/dist/components/InputNumber.d.ts +19 -0
- package/dist/components/Join.d.ts +6 -0
- package/dist/components/Label.d.ts +15 -0
- package/dist/components/Layout.d.ts +59 -0
- package/dist/components/List.d.ts +13 -0
- package/dist/components/Loading.d.ts +9 -0
- package/dist/components/Masonry.d.ts +15 -0
- package/dist/components/Mention.d.ts +30 -0
- package/dist/components/Menu.d.ts +45 -0
- package/dist/components/Modal.d.ts +42 -0
- package/dist/components/Navbar.d.ts +8 -0
- package/dist/components/Notification.d.ts +43 -0
- package/dist/components/OTPInput.d.ts +32 -0
- package/dist/components/PageLayout.d.ts +9 -0
- package/dist/components/Pagination.d.ts +18 -0
- package/dist/components/Phone.d.ts +8 -0
- package/dist/components/Popconfirm.d.ts +17 -0
- package/dist/components/Popover.d.ts +15 -0
- package/dist/components/Progress.d.ts +5 -0
- package/dist/components/QRCode.d.ts +19 -0
- package/dist/components/RadialProgress.d.ts +10 -0
- package/dist/components/Radio.d.ts +20 -0
- package/dist/components/Range.d.ts +16 -0
- package/dist/components/Rating.d.ts +22 -0
- package/dist/components/Responsive.d.ts +18 -0
- package/dist/components/Result.d.ts +12 -0
- package/dist/components/Select.d.ts +10 -0
- package/dist/components/Skeleton.d.ts +9 -0
- package/dist/components/Space.d.ts +10 -0
- package/dist/components/Splitter.d.ts +27 -0
- package/dist/components/Stack.d.ts +10 -0
- package/dist/components/Stat.d.ts +18 -0
- package/dist/components/Steps.d.ts +16 -0
- package/dist/components/Table.d.ts +51 -0
- package/dist/components/Tabs.d.ts +21 -0
- package/dist/components/Tag.d.ts +18 -0
- package/dist/components/Textarea.d.ts +9 -0
- package/dist/components/ThemeController.d.ts +20 -0
- package/dist/components/TimePicker.d.ts +12 -0
- package/dist/components/Timeline.d.ts +24 -0
- package/dist/components/Toggle.d.ts +7 -0
- package/dist/components/Tooltip.d.ts +9 -0
- package/dist/components/Transfer.d.ts +22 -0
- package/dist/components/Tree.d.ts +40 -0
- package/dist/components/TreeSelect.d.ts +20 -0
- package/dist/components/Typography.d.ts +53 -0
- package/dist/components/Upload.d.ts +38 -0
- package/dist/components/Window.d.ts +7 -0
- package/dist/hooks/useBreakpoint.d.ts +10 -0
- package/dist/index.d.ts +172 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.js +33 -0
- package/dist/index10.js.map +1 -0
- package/dist/index100.js +24 -0
- package/dist/index100.js.map +1 -0
- package/dist/index101.js +27 -0
- package/dist/index101.js.map +1 -0
- package/dist/index102.js +23 -0
- package/dist/index102.js.map +1 -0
- package/dist/index103.js +103 -0
- package/dist/index103.js.map +1 -0
- package/dist/index104.js +363 -0
- package/dist/index104.js.map +1 -0
- package/dist/index105.js +28 -0
- package/dist/index105.js.map +1 -0
- package/dist/index106.js +76 -0
- package/dist/index106.js.map +1 -0
- package/dist/index107.js +19 -0
- package/dist/index107.js.map +1 -0
- package/dist/index108.js +69 -0
- package/dist/index108.js.map +1 -0
- package/dist/index109.js +147 -0
- package/dist/index109.js.map +1 -0
- package/dist/index11.js +268 -0
- package/dist/index11.js.map +1 -0
- package/dist/index110.js +5 -0
- package/dist/index110.js.map +1 -0
- package/dist/index111.js +59 -0
- package/dist/index111.js.map +1 -0
- package/dist/index112.js +5 -0
- package/dist/index112.js.map +1 -0
- package/dist/index113.js +5 -0
- package/dist/index113.js.map +1 -0
- package/dist/index114.js +5 -0
- package/dist/index114.js.map +1 -0
- package/dist/index115.js +5 -0
- package/dist/index115.js.map +1 -0
- package/dist/index116.js +5 -0
- package/dist/index116.js.map +1 -0
- package/dist/index117.js +5 -0
- package/dist/index117.js.map +1 -0
- package/dist/index118.js +5 -0
- package/dist/index118.js.map +1 -0
- package/dist/index119.js +5 -0
- package/dist/index119.js.map +1 -0
- package/dist/index12.js +98 -0
- package/dist/index12.js.map +1 -0
- package/dist/index120.js +35 -0
- package/dist/index120.js.map +1 -0
- package/dist/index121.js +5 -0
- package/dist/index121.js.map +1 -0
- package/dist/index122.js +11 -0
- package/dist/index122.js.map +1 -0
- package/dist/index123.js +5 -0
- package/dist/index123.js.map +1 -0
- package/dist/index124.js +5 -0
- package/dist/index124.js.map +1 -0
- package/dist/index125.js +24 -0
- package/dist/index125.js.map +1 -0
- package/dist/index126.js +5 -0
- package/dist/index126.js.map +1 -0
- package/dist/index127.js +27 -0
- package/dist/index127.js.map +1 -0
- package/dist/index128.js +74 -0
- package/dist/index128.js.map +1 -0
- package/dist/index129.js +24 -0
- package/dist/index129.js.map +1 -0
- package/dist/index13.js +161 -0
- package/dist/index13.js.map +1 -0
- package/dist/index130.js +37 -0
- package/dist/index130.js.map +1 -0
- package/dist/index131.js +73 -0
- package/dist/index131.js.map +1 -0
- package/dist/index132.js +5 -0
- package/dist/index132.js.map +1 -0
- package/dist/index133.js +25 -0
- package/dist/index133.js.map +1 -0
- package/dist/index134.js +5 -0
- package/dist/index134.js.map +1 -0
- package/dist/index135.js +5 -0
- package/dist/index135.js.map +1 -0
- package/dist/index136.js +5 -0
- package/dist/index136.js.map +1 -0
- package/dist/index137.js +5 -0
- package/dist/index137.js.map +1 -0
- package/dist/index138.js +7 -0
- package/dist/index138.js.map +1 -0
- package/dist/index14.js +153 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.js +8 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.js +74 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.js +20 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.js +101 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.js +117 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.js +50 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.js +187 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.js +113 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.js +35 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.js +44 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.js +15 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.js +36 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.js +66 -0
- package/dist/index26.js.map +1 -0
- package/dist/index27.js +83 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.js +21 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.js +164 -0
- package/dist/index29.js.map +1 -0
- package/dist/index3.js +31 -0
- package/dist/index3.js.map +1 -0
- package/dist/index30.js +1085 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.js +21 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.js +125 -0
- package/dist/index32.js.map +1 -0
- package/dist/index33.js +43 -0
- package/dist/index33.js.map +1 -0
- package/dist/index34.js +194 -0
- package/dist/index34.js.map +1 -0
- package/dist/index35.js +100 -0
- package/dist/index35.js.map +1 -0
- package/dist/index36.js +165 -0
- package/dist/index36.js.map +1 -0
- package/dist/index37.js +149 -0
- package/dist/index37.js.map +1 -0
- package/dist/index38.js +18 -0
- package/dist/index38.js.map +1 -0
- package/dist/index39.js +24 -0
- package/dist/index39.js.map +1 -0
- package/dist/index4.js +104 -0
- package/dist/index4.js.map +1 -0
- package/dist/index40.js +122 -0
- package/dist/index40.js.map +1 -0
- package/dist/index41.js +16 -0
- package/dist/index41.js.map +1 -0
- package/dist/index42.js +38 -0
- package/dist/index42.js.map +1 -0
- package/dist/index43.js +119 -0
- package/dist/index43.js.map +1 -0
- package/dist/index44.js +179 -0
- package/dist/index44.js.map +1 -0
- package/dist/index45.js +150 -0
- package/dist/index45.js.map +1 -0
- package/dist/index46.js +15 -0
- package/dist/index46.js.map +1 -0
- package/dist/index47.js +25 -0
- package/dist/index47.js.map +1 -0
- package/dist/index48.js +17 -0
- package/dist/index48.js.map +1 -0
- package/dist/index49.js +10 -0
- package/dist/index49.js.map +1 -0
- package/dist/index5.js +64 -0
- package/dist/index5.js.map +1 -0
- package/dist/index50.js +269 -0
- package/dist/index50.js.map +1 -0
- package/dist/index51.js +20 -0
- package/dist/index51.js.map +1 -0
- package/dist/index52.js +125 -0
- package/dist/index52.js.map +1 -0
- package/dist/index53.js +113 -0
- package/dist/index53.js.map +1 -0
- package/dist/index54.js +173 -0
- package/dist/index54.js.map +1 -0
- package/dist/index55.js +35 -0
- package/dist/index55.js.map +1 -0
- package/dist/index56.js +125 -0
- package/dist/index56.js.map +1 -0
- package/dist/index57.js +89 -0
- package/dist/index57.js.map +1 -0
- package/dist/index58.js +23 -0
- package/dist/index58.js.map +1 -0
- package/dist/index59.js +77 -0
- package/dist/index59.js.map +1 -0
- package/dist/index6.js +133 -0
- package/dist/index6.js.map +1 -0
- package/dist/index60.js +60 -0
- package/dist/index60.js.map +1 -0
- package/dist/index61.js +48 -0
- package/dist/index61.js.map +1 -0
- package/dist/index62.js +55 -0
- package/dist/index62.js.map +1 -0
- package/dist/index63.js +65 -0
- package/dist/index63.js.map +1 -0
- package/dist/index64.js +110 -0
- package/dist/index64.js.map +1 -0
- package/dist/index65.js +44 -0
- package/dist/index65.js.map +1 -0
- package/dist/index66.js +24 -0
- package/dist/index66.js.map +1 -0
- package/dist/index67.js +49 -0
- package/dist/index67.js.map +1 -0
- package/dist/index68.js +137 -0
- package/dist/index68.js.map +1 -0
- package/dist/index69.js +55 -0
- package/dist/index69.js.map +1 -0
- package/dist/index7.js +14 -0
- package/dist/index7.js.map +1 -0
- package/dist/index70.js +25 -0
- package/dist/index70.js.map +1 -0
- package/dist/index71.js +25 -0
- package/dist/index71.js.map +1 -0
- package/dist/index72.js +332 -0
- package/dist/index72.js.map +1 -0
- package/dist/index73.js +59 -0
- package/dist/index73.js.map +1 -0
- package/dist/index74.js +43 -0
- package/dist/index74.js.map +1 -0
- package/dist/index75.js +98 -0
- package/dist/index75.js.map +1 -0
- package/dist/index76.js +133 -0
- package/dist/index76.js.map +1 -0
- package/dist/index77.js +164 -0
- package/dist/index77.js.map +1 -0
- package/dist/index78.js +68 -0
- package/dist/index78.js.map +1 -0
- package/dist/index79.js +38 -0
- package/dist/index79.js.map +1 -0
- package/dist/index8.js +73 -0
- package/dist/index8.js.map +1 -0
- package/dist/index80.js +37 -0
- package/dist/index80.js.map +1 -0
- package/dist/index81.js +213 -0
- package/dist/index81.js.map +1 -0
- package/dist/index82.js +216 -0
- package/dist/index82.js.map +1 -0
- package/dist/index83.js +298 -0
- package/dist/index83.js.map +1 -0
- package/dist/index84.js +181 -0
- package/dist/index84.js.map +1 -0
- package/dist/index85.js +261 -0
- package/dist/index85.js.map +1 -0
- package/dist/index86.js +17 -0
- package/dist/index86.js.map +1 -0
- package/dist/index87.js +36 -0
- package/dist/index87.js.map +1 -0
- package/dist/index88.js +10796 -0
- package/dist/index88.js.map +1 -0
- package/dist/index89.js +8 -0
- package/dist/index89.js.map +1 -0
- package/dist/index9.js +95 -0
- package/dist/index9.js.map +1 -0
- package/dist/index90.js +45 -0
- package/dist/index90.js.map +1 -0
- package/dist/index91.js +5 -0
- package/dist/index91.js.map +1 -0
- package/dist/index92.js +10 -0
- package/dist/index92.js.map +1 -0
- package/dist/index93.js +155 -0
- package/dist/index93.js.map +1 -0
- package/dist/index94.js +33 -0
- package/dist/index94.js.map +1 -0
- package/dist/index95.js +33 -0
- package/dist/index95.js.map +1 -0
- package/dist/index96.js +5 -0
- package/dist/index96.js.map +1 -0
- package/dist/index97.js +75 -0
- package/dist/index97.js.map +1 -0
- package/dist/index98.js +42 -0
- package/dist/index98.js.map +1 -0
- package/dist/index99.js +29 -0
- package/dist/index99.js.map +1 -0
- package/package.json +71 -0
package/dist/index16.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsxs as r, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f, useId as v, createContext as N, useContext as w } from "react";
|
|
3
|
+
const d = N(null);
|
|
4
|
+
function g({
|
|
5
|
+
children: t,
|
|
6
|
+
title: s,
|
|
7
|
+
open: l,
|
|
8
|
+
defaultOpen: u = !1,
|
|
9
|
+
onChange: m,
|
|
10
|
+
icon: C = "arrow",
|
|
11
|
+
className: h = "",
|
|
12
|
+
...c
|
|
13
|
+
}) {
|
|
14
|
+
const [x, b] = f(u), e = l !== void 0 ? l : x, n = v(), a = () => {
|
|
15
|
+
const p = !e;
|
|
16
|
+
l === void 0 && b(p), m?.(p);
|
|
17
|
+
}, i = [
|
|
18
|
+
"collapse",
|
|
19
|
+
"bg-base-200",
|
|
20
|
+
{
|
|
21
|
+
arrow: "collapse-arrow",
|
|
22
|
+
plus: "collapse-plus",
|
|
23
|
+
none: ""
|
|
24
|
+
}[C],
|
|
25
|
+
e && "collapse-open",
|
|
26
|
+
!e && "collapse-close",
|
|
27
|
+
h
|
|
28
|
+
].filter(Boolean).join(" ");
|
|
29
|
+
return s !== void 0 ? /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
|
|
30
|
+
/* @__PURE__ */ o(
|
|
31
|
+
"input",
|
|
32
|
+
{
|
|
33
|
+
type: "checkbox",
|
|
34
|
+
id: n,
|
|
35
|
+
className: "peer",
|
|
36
|
+
checked: e,
|
|
37
|
+
onChange: a,
|
|
38
|
+
style: { position: "absolute", opacity: 0, pointerEvents: "none" }
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ o("label", { htmlFor: n, className: "collapse-title text-xl font-medium", children: s }),
|
|
42
|
+
/* @__PURE__ */ o("div", { className: "collapse-content", children: t })
|
|
43
|
+
] }) : /* @__PURE__ */ o(d.Provider, { value: { isOpen: e, toggle: a, checkboxId: n }, children: /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
|
|
44
|
+
/* @__PURE__ */ o(
|
|
45
|
+
"input",
|
|
46
|
+
{
|
|
47
|
+
type: "checkbox",
|
|
48
|
+
id: n,
|
|
49
|
+
className: "peer",
|
|
50
|
+
checked: e,
|
|
51
|
+
onChange: a,
|
|
52
|
+
style: { position: "absolute", opacity: 0, pointerEvents: "none" }
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
t
|
|
56
|
+
] }) });
|
|
57
|
+
}
|
|
58
|
+
function k({ children: t, className: s = "" }) {
|
|
59
|
+
const l = w(d);
|
|
60
|
+
if (!l)
|
|
61
|
+
throw new Error("Collapse.Title must be used within Collapse");
|
|
62
|
+
return /* @__PURE__ */ o("label", { htmlFor: l.checkboxId, className: `collapse-title text-xl font-medium ${s}`, children: t });
|
|
63
|
+
}
|
|
64
|
+
function y({ children: t, className: s = "" }) {
|
|
65
|
+
return /* @__PURE__ */ o("div", { className: `collapse-content ${s}`, children: t });
|
|
66
|
+
}
|
|
67
|
+
const E = Object.assign(g, {
|
|
68
|
+
Title: k,
|
|
69
|
+
Content: y
|
|
70
|
+
});
|
|
71
|
+
export {
|
|
72
|
+
E as Collapse
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=index16.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index16.js","sources":["../src/components/Collapse.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onChange'> {\n children: React.ReactNode\n title?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onChange?: (open: boolean) => void\n icon?: 'arrow' | 'plus' | 'none'\n}\n\nexport interface CollapseTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface CollapseContentProps {\n children: React.ReactNode\n className?: string\n}\n\ninterface CollapseContextValue {\n isOpen: boolean\n toggle: () => void\n checkboxId: string\n}\n\nconst CollapseContext = createContext<CollapseContextValue | null>(null)\n\nfunction CollapseRoot({\n children,\n title,\n open,\n defaultOpen = false,\n onChange,\n icon = 'arrow',\n className = '',\n ...rest\n}: CollapseProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = open !== undefined ? open : internalOpen\n const checkboxId = useId()\n\n const toggle = () => {\n const newOpen = !isOpen\n if (open === undefined) {\n setInternalOpen(newOpen)\n }\n onChange?.(newOpen)\n }\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const classes = [\n 'collapse',\n 'bg-base-200',\n iconClasses[icon],\n isOpen && 'collapse-open',\n !isOpen && 'collapse-close',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If title prop is provided, render with automatic structure\n if (title !== undefined) {\n return (\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n <label htmlFor={checkboxId} className=\"collapse-title text-xl font-medium\">\n {title}\n </label>\n <div className=\"collapse-content\">{children}</div>\n </div>\n )\n }\n\n // Otherwise, use compound component pattern with Context\n return (\n <CollapseContext.Provider value={{ isOpen, toggle, checkboxId }}>\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n {children}\n </div>\n </CollapseContext.Provider>\n )\n}\n\nfunction CollapseTitle({ children, className = '' }: CollapseTitleProps) {\n const context = useContext(CollapseContext)\n if (!context) {\n throw new Error('Collapse.Title must be used within Collapse')\n }\n\n return (\n <label htmlFor={context.checkboxId} className={`collapse-title text-xl font-medium ${className}`}>\n {children}\n </label>\n )\n}\n\nfunction CollapseContent({ children, className = '' }: CollapseContentProps) {\n return <div className={`collapse-content ${className}`}>{children}</div>\n}\n\nexport const Collapse = Object.assign(CollapseRoot, {\n Title: CollapseTitle,\n Content: CollapseContent,\n})\n"],"names":["CollapseContext","createContext","CollapseRoot","children","title","open","defaultOpen","onChange","icon","className","rest","internalOpen","setInternalOpen","useState","isOpen","checkboxId","useId","toggle","newOpen","classes","jsxs","jsx","CollapseTitle","context","useContext","CollapseContent","Collapse"],"mappings":";;AA2BA,MAAMA,IAAkBC,EAA2C,IAAI;AAEvE,SAASC,EAAa;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAkB;AAChB,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAASP,CAAW,GACtDQ,IAAST,MAAS,SAAYA,IAAOM,GACrCI,IAAaC,EAAA,GAEbC,IAAS,MAAM;AACnB,UAAMC,IAAU,CAACJ;AACjB,IAAIT,MAAS,UACXO,EAAgBM,CAAO,GAEzBX,IAAWW,CAAO;AAAA,EACpB,GAQMC,IAAU;AAAA,IACd;AAAA,IACA;AAAA,IARkB;AAAA,MAClB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,EAMMX,CAAI;AAAA,IAChBM,KAAU;AAAA,IACV,CAACA,KAAU;AAAA,IACXL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAGX,SAAIL,MAAU,SAEV,gBAAAgB,EAAC,SAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,sBAElE,SAAA,EAAM,SAASF,GAAY,WAAU,sCACnC,UAAAX,GACH;AAAA,IACA,gBAAAiB,EAAC,OAAA,EAAI,WAAU,oBAAoB,UAAAlB,EAAA,CAAS;AAAA,EAAA,GAC9C,sBAMDH,EAAgB,UAAhB,EAAyB,OAAO,EAAE,QAAAc,GAAQ,QAAAG,GAAQ,YAAAF,EAAA,GACjD,UAAA,gBAAAK,EAAC,OAAA,EAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,IAElEd;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;AAEA,SAASmB,EAAc,EAAE,UAAAnB,GAAU,WAAAM,IAAY,MAA0B;AACvE,QAAMc,IAAUC,EAAWxB,CAAe;AAC1C,MAAI,CAACuB;AACH,UAAM,IAAI,MAAM,6CAA6C;AAG/D,SACE,gBAAAF,EAAC,WAAM,SAASE,EAAQ,YAAY,WAAW,sCAAsCd,CAAS,IAC3F,UAAAN,EAAA,CACH;AAEJ;AAEA,SAASsB,EAAgB,EAAE,UAAAtB,GAAU,WAAAM,IAAY,MAA4B;AAC3E,2BAAQ,OAAA,EAAI,WAAW,oBAAoBA,CAAS,IAAK,UAAAN,GAAS;AACpE;AAEO,MAAMuB,IAAW,OAAO,OAAOxB,GAAc;AAAA,EAClD,OAAOoB;AAAA,EACP,SAASG;AACX,CAAC;"}
|
package/dist/index17.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
const n = ({
|
|
3
|
+
children: s,
|
|
4
|
+
size: l = "lg",
|
|
5
|
+
className: x = "",
|
|
6
|
+
...a
|
|
7
|
+
}) => {
|
|
8
|
+
const m = ["mx-auto px-4 sm:px-6 lg:px-8", {
|
|
9
|
+
sm: "max-w-2xl",
|
|
10
|
+
md: "max-w-4xl",
|
|
11
|
+
lg: "max-w-6xl",
|
|
12
|
+
xl: "max-w-7xl",
|
|
13
|
+
full: "max-w-full"
|
|
14
|
+
}[l], x].filter(Boolean).join(" ");
|
|
15
|
+
return /* @__PURE__ */ e("div", { className: m, ...a, children: s });
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
n as Container
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index17.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index17.js","sources":["../src/components/Container.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n}\n\nexport const Container: React.FC<ContainerProps> = ({\n children,\n size = 'lg',\n className = '',\n ...rest\n}) => {\n const sizeClasses = {\n sm: 'max-w-2xl',\n md: 'max-w-4xl',\n lg: 'max-w-6xl',\n xl: 'max-w-7xl',\n full: 'max-w-full',\n }\n\n const classes = ['mx-auto px-4 sm:px-6 lg:px-8', sizeClasses[size], className]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} {...rest}>{children}</div>\n}\n"],"names":["Container","children","size","className","rest","classes"],"mappings":";AAOO,MAAMA,IAAsC,CAAC;AAAA,EAClD,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AASJ,QAAMC,IAAU,CAAC,gCARG;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA,EAGqDH,CAAI,GAAGC,CAAS,EAC1E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAAO,UAAAH,GAAS;AACtD;"}
|
package/dist/index18.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsxs as g, Fragment as M, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as v, useRef as y, useCallback as w, useEffect as k } from "react";
|
|
3
|
+
import { createPortal as S } from "react-dom";
|
|
4
|
+
const C = ({ item: e, onSelect: h, onClose: c }) => {
|
|
5
|
+
const [f, m] = v(!1), s = y(null);
|
|
6
|
+
if (e.divider)
|
|
7
|
+
return /* @__PURE__ */ r("li", { className: "divider my-1" });
|
|
8
|
+
const b = () => {
|
|
9
|
+
e.disabled || e.children && e.children.length > 0 || (h(e.key), c());
|
|
10
|
+
}, t = e.children && e.children.length > 0;
|
|
11
|
+
return /* @__PURE__ */ g(
|
|
12
|
+
"li",
|
|
13
|
+
{
|
|
14
|
+
ref: s,
|
|
15
|
+
onMouseEnter: () => t && m(!0),
|
|
16
|
+
onMouseLeave: () => t && m(!1),
|
|
17
|
+
className: "relative",
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ g(
|
|
20
|
+
"button",
|
|
21
|
+
{
|
|
22
|
+
onClick: b,
|
|
23
|
+
disabled: e.disabled,
|
|
24
|
+
className: `
|
|
25
|
+
flex items-center gap-2 w-full px-4 py-2 text-left text-sm
|
|
26
|
+
${e.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-base-200"}
|
|
27
|
+
${e.danger ? "text-error hover:bg-error/10" : ""}
|
|
28
|
+
`,
|
|
29
|
+
children: [
|
|
30
|
+
e.icon && /* @__PURE__ */ r("span", { className: "w-4 h-4", children: e.icon }),
|
|
31
|
+
/* @__PURE__ */ r("span", { className: "flex-1", children: e.label }),
|
|
32
|
+
t && /* @__PURE__ */ r("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
t && f && /* @__PURE__ */ r("ul", { className: "menu bg-base-100 rounded-box shadow-lg border border-base-300 absolute left-full top-0 min-w-[160px] z-50", children: e.children.map((d) => /* @__PURE__ */ r(C, { item: d, onSelect: h, onClose: c }, d.key)) })
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}, R = ({
|
|
41
|
+
children: e,
|
|
42
|
+
items: h,
|
|
43
|
+
onSelect: c,
|
|
44
|
+
disabled: f = !1,
|
|
45
|
+
className: m = ""
|
|
46
|
+
}) => {
|
|
47
|
+
const [s, b] = v(!1), [t, d] = v({ x: 0, y: 0 }), a = y(null), E = y(null), N = w(
|
|
48
|
+
(n) => {
|
|
49
|
+
if (f) return;
|
|
50
|
+
n.preventDefault(), n.stopPropagation();
|
|
51
|
+
let o = n.clientX, l = n.clientY;
|
|
52
|
+
d({ x: o, y: l }), b(!0);
|
|
53
|
+
},
|
|
54
|
+
[f]
|
|
55
|
+
), u = w(() => {
|
|
56
|
+
b(!1);
|
|
57
|
+
}, []), L = w(
|
|
58
|
+
(n) => {
|
|
59
|
+
c?.(n);
|
|
60
|
+
},
|
|
61
|
+
[c]
|
|
62
|
+
);
|
|
63
|
+
return k(() => {
|
|
64
|
+
if (s && a.current) {
|
|
65
|
+
const o = a.current.getBoundingClientRect(), l = window.innerWidth, i = window.innerHeight;
|
|
66
|
+
let { x: p, y: x } = t;
|
|
67
|
+
p + o.width > l && (p = l - o.width - 8), x + o.height > i && (x = i - o.height - 8), (p !== t.x || x !== t.y) && d({ x: p, y: x });
|
|
68
|
+
}
|
|
69
|
+
}, [s, t]), k(() => {
|
|
70
|
+
if (!s) return;
|
|
71
|
+
const n = (i) => {
|
|
72
|
+
a.current && !a.current.contains(i.target) && u();
|
|
73
|
+
}, o = (i) => {
|
|
74
|
+
i.key === "Escape" && u();
|
|
75
|
+
}, l = () => {
|
|
76
|
+
u();
|
|
77
|
+
};
|
|
78
|
+
return document.addEventListener("mousedown", n), document.addEventListener("keydown", o), document.addEventListener("scroll", l, !0), () => {
|
|
79
|
+
document.removeEventListener("mousedown", n), document.removeEventListener("keydown", o), document.removeEventListener("scroll", l, !0);
|
|
80
|
+
};
|
|
81
|
+
}, [s, u]), /* @__PURE__ */ g(M, { children: [
|
|
82
|
+
/* @__PURE__ */ r("div", { ref: E, onContextMenu: N, className: "inline-block", children: e }),
|
|
83
|
+
s && S(
|
|
84
|
+
/* @__PURE__ */ r(
|
|
85
|
+
"ul",
|
|
86
|
+
{
|
|
87
|
+
ref: a,
|
|
88
|
+
className: `menu bg-base-100 rounded-box shadow-lg border border-base-300 min-w-[160px] p-1 fixed z-[9999] ${m}`,
|
|
89
|
+
style: { left: t.x, top: t.y },
|
|
90
|
+
children: h.map((n) => /* @__PURE__ */ r(C, { item: n, onSelect: L, onClose: u }, n.key))
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
document.body
|
|
94
|
+
)
|
|
95
|
+
] });
|
|
96
|
+
};
|
|
97
|
+
R.displayName = "ContextMenu";
|
|
98
|
+
export {
|
|
99
|
+
R as ContextMenu
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=index18.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index18.js","sources":["../src/components/ContextMenu.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface ContextMenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n danger?: boolean\n divider?: boolean\n children?: ContextMenuItem[]\n}\n\nexport interface ContextMenuProps {\n /** Element that triggers the context menu on right-click */\n children: React.ReactNode\n /** Menu items */\n items: ContextMenuItem[]\n /** Callback when an item is selected */\n onSelect?: (key: string) => void\n /** Whether the context menu is disabled */\n disabled?: boolean\n /** Additional CSS classes for the menu */\n className?: string\n}\n\ninterface MenuPosition {\n x: number\n y: number\n}\n\nconst MenuItem: React.FC<{\n item: ContextMenuItem\n onSelect: (key: string) => void\n onClose: () => void\n}> = ({ item, onSelect, onClose }) => {\n const [showSubmenu, setShowSubmenu] = useState(false)\n const itemRef = useRef<HTMLLIElement>(null)\n\n if (item.divider) {\n return <li className=\"divider my-1\"></li>\n }\n\n const handleClick = () => {\n if (item.disabled) return\n if (item.children && item.children.length > 0) return\n onSelect(item.key)\n onClose()\n }\n\n const hasSubmenu = item.children && item.children.length > 0\n\n return (\n <li\n ref={itemRef}\n onMouseEnter={() => hasSubmenu && setShowSubmenu(true)}\n onMouseLeave={() => hasSubmenu && setShowSubmenu(false)}\n className=\"relative\"\n >\n <button\n onClick={handleClick}\n disabled={item.disabled}\n className={`\n flex items-center gap-2 w-full px-4 py-2 text-left text-sm\n ${item.disabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-base-200'}\n ${item.danger ? 'text-error hover:bg-error/10' : ''}\n `}\n >\n {item.icon && <span className=\"w-4 h-4\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n {hasSubmenu && (\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </button>\n {hasSubmenu && showSubmenu && (\n <ul className=\"menu bg-base-100 rounded-box shadow-lg border border-base-300 absolute left-full top-0 min-w-[160px] z-50\">\n {item.children!.map((child) => (\n <MenuItem key={child.key} item={child} onSelect={onSelect} onClose={onClose} />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\nexport const ContextMenu: React.FC<ContextMenuProps> = ({\n children,\n items,\n onSelect,\n disabled = false,\n className = '',\n}) => {\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState<MenuPosition>({ x: 0, y: 0 })\n const menuRef = useRef<HTMLUListElement>(null)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n\n // Calculate position, ensuring menu stays within viewport\n let x = e.clientX\n let y = e.clientY\n\n // We'll adjust after render when we know menu dimensions\n setPosition({ x, y })\n setVisible(true)\n },\n [disabled]\n )\n\n const handleClose = useCallback(() => {\n setVisible(false)\n }, [])\n\n const handleSelect = useCallback(\n (key: string) => {\n onSelect?.(key)\n },\n [onSelect]\n )\n\n // Adjust position after menu renders to keep it in viewport\n useEffect(() => {\n if (visible && menuRef.current) {\n const menu = menuRef.current\n const rect = menu.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n let { x, y } = position\n\n if (x + rect.width > viewportWidth) {\n x = viewportWidth - rect.width - 8\n }\n if (y + rect.height > viewportHeight) {\n y = viewportHeight - rect.height - 8\n }\n\n if (x !== position.x || y !== position.y) {\n setPosition({ x, y })\n }\n }\n }, [visible, position])\n\n // Close on click outside or escape\n useEffect(() => {\n if (!visible) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n handleClose()\n }\n }\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose()\n }\n }\n\n const handleScroll = () => {\n handleClose()\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('keydown', handleEscape)\n document.addEventListener('scroll', handleScroll, true)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('keydown', handleEscape)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }, [visible, handleClose])\n\n return (\n <>\n <div ref={triggerRef} onContextMenu={handleContextMenu} className=\"inline-block\">\n {children}\n </div>\n {visible &&\n createPortal(\n <ul\n ref={menuRef}\n className={`menu bg-base-100 rounded-box shadow-lg border border-base-300 min-w-[160px] p-1 fixed z-[9999] ${className}`}\n style={{ left: position.x, top: position.y }}\n >\n {items.map((item) => (\n <MenuItem key={item.key} item={item} onSelect={handleSelect} onClose={handleClose} />\n ))}\n </ul>,\n document.body\n )}\n </>\n )\n}\n\nContextMenu.displayName = 'ContextMenu'\n"],"names":["MenuItem","item","onSelect","onClose","showSubmenu","setShowSubmenu","useState","itemRef","useRef","jsx","handleClick","hasSubmenu","jsxs","child","ContextMenu","children","items","disabled","className","visible","setVisible","position","setPosition","menuRef","triggerRef","handleContextMenu","useCallback","e","x","y","handleClose","handleSelect","key","useEffect","rect","viewportWidth","viewportHeight","handleClickOutside","handleEscape","handleScroll","Fragment","createPortal"],"mappings":"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"}
|
package/dist/index19.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsxs as l, jsx as t, Fragment as N } from "react/jsx-runtime";
|
|
2
|
+
import { useState as C, useCallback as j, useEffect as k } from "react";
|
|
3
|
+
const D = (s) => {
|
|
4
|
+
const e = s - Date.now();
|
|
5
|
+
return e <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0 } : {
|
|
6
|
+
days: Math.floor(e / (1e3 * 60 * 60 * 24)),
|
|
7
|
+
hours: Math.floor(e / (1e3 * 60 * 60) % 24),
|
|
8
|
+
minutes: Math.floor(e / 1e3 / 60 % 60),
|
|
9
|
+
seconds: Math.floor(e / 1e3 % 60)
|
|
10
|
+
};
|
|
11
|
+
}, x = ({ value: s, label: e, size: r, showLabel: o, boxed: f }) => {
|
|
12
|
+
const a = /* @__PURE__ */ t("span", { className: `countdown font-mono ${{
|
|
13
|
+
xs: "text-lg",
|
|
14
|
+
sm: "text-2xl",
|
|
15
|
+
md: "text-4xl",
|
|
16
|
+
lg: "text-5xl",
|
|
17
|
+
xl: "text-6xl"
|
|
18
|
+
}[r || "md"]}`, children: /* @__PURE__ */ t(
|
|
19
|
+
"span",
|
|
20
|
+
{
|
|
21
|
+
style: { "--value": s },
|
|
22
|
+
"aria-live": "polite",
|
|
23
|
+
"aria-label": String(s),
|
|
24
|
+
children: String(s).padStart(2, "0")
|
|
25
|
+
}
|
|
26
|
+
) });
|
|
27
|
+
return f ? /* @__PURE__ */ l("div", { className: "flex flex-col items-center bg-neutral text-neutral-content rounded-box p-2", children: [
|
|
28
|
+
a,
|
|
29
|
+
o && e && /* @__PURE__ */ t("span", { className: "text-xs mt-1", children: e })
|
|
30
|
+
] }) : /* @__PURE__ */ l("div", { className: "flex flex-col items-center", children: [
|
|
31
|
+
a,
|
|
32
|
+
o && e && /* @__PURE__ */ t("span", { className: "text-xs text-base-content/70 mt-1", children: e })
|
|
33
|
+
] });
|
|
34
|
+
}, I = ({
|
|
35
|
+
value: s,
|
|
36
|
+
format: e = "HH:MM:SS",
|
|
37
|
+
onFinish: r,
|
|
38
|
+
onChange: o,
|
|
39
|
+
className: f = "",
|
|
40
|
+
size: n = "md",
|
|
41
|
+
showLabels: a = !1,
|
|
42
|
+
labels: i = {},
|
|
43
|
+
boxed: c = !1
|
|
44
|
+
}) => {
|
|
45
|
+
const d = s instanceof Date ? s.getTime() : s, [m, L] = C(() => D(d)), [M, T] = C(!1), u = {
|
|
46
|
+
days: i.days || "days",
|
|
47
|
+
hours: i.hours || "hours",
|
|
48
|
+
minutes: i.minutes || "min",
|
|
49
|
+
seconds: i.seconds || "sec"
|
|
50
|
+
}, p = j(() => {
|
|
51
|
+
const y = D(d);
|
|
52
|
+
L(y);
|
|
53
|
+
const v = d - Date.now();
|
|
54
|
+
o?.(Math.max(0, v)), v <= 0 && !M && (T(!0), r?.());
|
|
55
|
+
}, [d, o, r, M]);
|
|
56
|
+
k(() => {
|
|
57
|
+
const y = setInterval(p, 1e3);
|
|
58
|
+
return p(), () => clearInterval(y);
|
|
59
|
+
}, [p]);
|
|
60
|
+
const H = e.includes("D"), S = e.includes("H"), w = e.includes("M"), h = e.includes("S"), g = n === "lg" || n === "xl" ? "text-3xl" : n === "md" ? "text-2xl" : "text-xl";
|
|
61
|
+
return /* @__PURE__ */ l("div", { className: `flex gap-2 items-center ${f}`, children: [
|
|
62
|
+
H && /* @__PURE__ */ l(N, { children: [
|
|
63
|
+
/* @__PURE__ */ t(
|
|
64
|
+
x,
|
|
65
|
+
{
|
|
66
|
+
value: m.days,
|
|
67
|
+
label: u.days,
|
|
68
|
+
size: n,
|
|
69
|
+
showLabel: a,
|
|
70
|
+
boxed: c
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
(S || w || h) && !c && /* @__PURE__ */ t("span", { className: g, children: ":" })
|
|
74
|
+
] }),
|
|
75
|
+
S && /* @__PURE__ */ l(N, { children: [
|
|
76
|
+
/* @__PURE__ */ t(
|
|
77
|
+
x,
|
|
78
|
+
{
|
|
79
|
+
value: m.hours,
|
|
80
|
+
label: u.hours,
|
|
81
|
+
size: n,
|
|
82
|
+
showLabel: a,
|
|
83
|
+
boxed: c
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
(w || h) && !c && /* @__PURE__ */ t("span", { className: g, children: ":" })
|
|
87
|
+
] }),
|
|
88
|
+
w && /* @__PURE__ */ l(N, { children: [
|
|
89
|
+
/* @__PURE__ */ t(
|
|
90
|
+
x,
|
|
91
|
+
{
|
|
92
|
+
value: m.minutes,
|
|
93
|
+
label: u.minutes,
|
|
94
|
+
size: n,
|
|
95
|
+
showLabel: a,
|
|
96
|
+
boxed: c
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
h && !c && /* @__PURE__ */ t("span", { className: g, children: ":" })
|
|
100
|
+
] }),
|
|
101
|
+
h && /* @__PURE__ */ t(
|
|
102
|
+
x,
|
|
103
|
+
{
|
|
104
|
+
value: m.seconds,
|
|
105
|
+
label: u.seconds,
|
|
106
|
+
size: n,
|
|
107
|
+
showLabel: a,
|
|
108
|
+
boxed: c
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] });
|
|
112
|
+
};
|
|
113
|
+
I.displayName = "Countdown";
|
|
114
|
+
export {
|
|
115
|
+
I as Countdown
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=index19.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index19.js","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from 'react'\n\nexport interface CountdownProps {\n /** Target timestamp in milliseconds or Date object */\n value: number | Date\n /** Format string: 'D' days, 'H' hours, 'M' minutes, 'S' seconds */\n format?: string\n /** Callback when countdown reaches zero */\n onFinish?: () => void\n /** Callback on each tick with remaining time */\n onChange?: (value: number) => void\n /** Additional CSS classes */\n className?: string\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Show labels under each unit */\n showLabels?: boolean\n /** Custom labels */\n labels?: {\n days?: string\n hours?: string\n minutes?: string\n seconds?: string\n }\n /** Show box style around each unit */\n boxed?: boolean\n}\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\nconst calculateTimeLeft = (targetTime: number): TimeLeft => {\n const difference = targetTime - Date.now()\n\n if (difference <= 0) {\n return { days: 0, hours: 0, minutes: 0, seconds: 0 }\n }\n\n return {\n days: Math.floor(difference / (1000 * 60 * 60 * 24)),\n hours: Math.floor((difference / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((difference / 1000 / 60) % 60),\n seconds: Math.floor((difference / 1000) % 60),\n }\n}\n\nconst CountdownUnit: React.FC<{\n value: number\n label?: string\n size?: CountdownProps['size']\n showLabel?: boolean\n boxed?: boolean\n}> = ({ value, label, size, showLabel, boxed }) => {\n const sizeClasses = {\n xs: 'text-lg',\n sm: 'text-2xl',\n md: 'text-4xl',\n lg: 'text-5xl',\n xl: 'text-6xl',\n }\n\n const content = (\n <span className={`countdown font-mono ${sizeClasses[size || 'md']}`}>\n <span\n style={{ '--value': value } as React.CSSProperties}\n aria-live=\"polite\"\n aria-label={String(value)}\n >\n {String(value).padStart(2, '0')}\n </span>\n </span>\n )\n\n if (boxed) {\n return (\n <div className=\"flex flex-col items-center bg-neutral text-neutral-content rounded-box p-2\">\n {content}\n {showLabel && label && <span className=\"text-xs mt-1\">{label}</span>}\n </div>\n )\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n {content}\n {showLabel && label && (\n <span className=\"text-xs text-base-content/70 mt-1\">{label}</span>\n )}\n </div>\n )\n}\n\nexport const Countdown: React.FC<CountdownProps> = ({\n value,\n format = 'HH:MM:SS',\n onFinish,\n onChange,\n className = '',\n size = 'md',\n showLabels = false,\n labels = {},\n boxed = false,\n}) => {\n const targetTime = value instanceof Date ? value.getTime() : value\n const [timeLeft, setTimeLeft] = useState<TimeLeft>(() => calculateTimeLeft(targetTime))\n const [finished, setFinished] = useState(false)\n\n const defaultLabels = {\n days: labels.days || 'days',\n hours: labels.hours || 'hours',\n minutes: labels.minutes || 'min',\n seconds: labels.seconds || 'sec',\n }\n\n const tick = useCallback(() => {\n const newTimeLeft = calculateTimeLeft(targetTime)\n setTimeLeft(newTimeLeft)\n\n const remaining = targetTime - Date.now()\n onChange?.(Math.max(0, remaining))\n\n if (remaining <= 0 && !finished) {\n setFinished(true)\n onFinish?.()\n }\n }, [targetTime, onChange, onFinish, finished])\n\n useEffect(() => {\n const timer = setInterval(tick, 1000)\n tick() // Initial tick\n\n return () => clearInterval(timer)\n }, [tick])\n\n const showDays = format.includes('D')\n const showHours = format.includes('H')\n const showMinutes = format.includes('M')\n const showSeconds = format.includes('S')\n\n const separatorSize = size === 'lg' || size === 'xl' ? 'text-3xl' : size === 'md' ? 'text-2xl' : 'text-xl'\n\n return (\n <div className={`flex gap-2 items-center ${className}`}>\n {showDays && (\n <>\n <CountdownUnit\n value={timeLeft.days}\n label={defaultLabels.days}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {(showHours || showMinutes || showSeconds) && !boxed && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showHours && (\n <>\n <CountdownUnit\n value={timeLeft.hours}\n label={defaultLabels.hours}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {(showMinutes || showSeconds) && !boxed && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showMinutes && (\n <>\n <CountdownUnit\n value={timeLeft.minutes}\n label={defaultLabels.minutes}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeconds && !boxed && <span className={separatorSize}>:</span>}\n </>\n )}\n {showSeconds && (\n <CountdownUnit\n value={timeLeft.seconds}\n label={defaultLabels.seconds}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n )}\n </div>\n )\n}\n\nCountdown.displayName = 'Countdown'\n"],"names":["calculateTimeLeft","targetTime","difference","CountdownUnit","value","label","size","showLabel","boxed","content","jsx","jsxs","Countdown","format","onFinish","onChange","className","showLabels","labels","timeLeft","setTimeLeft","useState","finished","setFinished","defaultLabels","tick","useCallback","newTimeLeft","remaining","useEffect","timer","showDays","showHours","showMinutes","showSeconds","separatorSize","Fragment"],"mappings":"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"}
|
package/dist/index2.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsxs as z, jsx as v } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f, useRef as p, useEffect as L } from "react";
|
|
3
|
+
const H = ({
|
|
4
|
+
children: y,
|
|
5
|
+
offsetTop: i,
|
|
6
|
+
offsetBottom: n,
|
|
7
|
+
target: d,
|
|
8
|
+
onChange: w,
|
|
9
|
+
className: S = "",
|
|
10
|
+
...g
|
|
11
|
+
}) => {
|
|
12
|
+
const [r, m] = f(!1), [R, h] = f({}), [A, u] = f({}), s = p(null), o = p(null);
|
|
13
|
+
return L(() => {
|
|
14
|
+
const x = d ? d() : window, t = () => {
|
|
15
|
+
if (!s.current || !o.current) return;
|
|
16
|
+
const l = s.current.getBoundingClientRect(), a = o.current.getBoundingClientRect();
|
|
17
|
+
let e = !1, c = {};
|
|
18
|
+
if (i !== void 0)
|
|
19
|
+
e = l.top < i, e && (c = {
|
|
20
|
+
position: "fixed",
|
|
21
|
+
top: i,
|
|
22
|
+
width: l.width,
|
|
23
|
+
zIndex: 100
|
|
24
|
+
});
|
|
25
|
+
else if (n !== void 0) {
|
|
26
|
+
const E = window.innerHeight;
|
|
27
|
+
e = l.bottom > E - n, e && (c = {
|
|
28
|
+
position: "fixed",
|
|
29
|
+
bottom: n,
|
|
30
|
+
width: l.width,
|
|
31
|
+
zIndex: 100
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
e !== r && (m(e), w?.(e)), e ? (h({
|
|
35
|
+
width: a.width,
|
|
36
|
+
height: a.height
|
|
37
|
+
}), u(c)) : (h({}), u({}));
|
|
38
|
+
};
|
|
39
|
+
return x.addEventListener("scroll", t), window.addEventListener("resize", t), t(), () => {
|
|
40
|
+
x.removeEventListener("scroll", t), window.removeEventListener("resize", t);
|
|
41
|
+
};
|
|
42
|
+
}, [d, i, n, r, w]), /* @__PURE__ */ z("div", { ref: s, className: S, "data-state": r ? "affixed" : "normal", ...g, children: [
|
|
43
|
+
r && /* @__PURE__ */ v("div", { style: R }),
|
|
44
|
+
/* @__PURE__ */ v("div", { ref: o, style: A, children: y })
|
|
45
|
+
] });
|
|
46
|
+
};
|
|
47
|
+
export {
|
|
48
|
+
H as Affix
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../src/components/Affix.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react'\n\nexport interface AffixProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Content to make sticky */\n children: React.ReactNode\n /** Offset from top when fixed (pixels) */\n offsetTop?: number\n /** Offset from bottom when fixed (pixels) */\n offsetBottom?: number\n /** Scroll target (default: window) */\n target?: () => HTMLElement | Window\n /** Callback when affix state changes */\n onChange?: (affixed: boolean) => void\n}\n\nexport const Affix: React.FC<AffixProps> = ({\n children,\n offsetTop,\n offsetBottom,\n target,\n onChange,\n className = '',\n ...rest\n}) => {\n const [affixed, setAffixed] = useState(false)\n const [placeholderStyle, setPlaceholderStyle] = useState<React.CSSProperties>({})\n const [affixStyle, setAffixStyle] = useState<React.CSSProperties>({})\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const scrollTarget = target ? target() : window\n\n const handleScroll = () => {\n if (!wrapperRef.current || !contentRef.current) return\n\n const rect = wrapperRef.current.getBoundingClientRect()\n const contentRect = contentRef.current.getBoundingClientRect()\n\n let shouldAffix = false\n let newAffixStyle: React.CSSProperties = {}\n\n if (offsetTop !== undefined) {\n // Affix to top\n shouldAffix = rect.top < offsetTop\n if (shouldAffix) {\n newAffixStyle = {\n position: 'fixed',\n top: offsetTop,\n width: rect.width,\n zIndex: 100,\n }\n }\n } else if (offsetBottom !== undefined) {\n // Affix to bottom\n const viewportHeight = window.innerHeight\n shouldAffix = rect.bottom > viewportHeight - offsetBottom\n if (shouldAffix) {\n newAffixStyle = {\n position: 'fixed',\n bottom: offsetBottom,\n width: rect.width,\n zIndex: 100,\n }\n }\n }\n\n if (shouldAffix !== affixed) {\n setAffixed(shouldAffix)\n onChange?.(shouldAffix)\n }\n\n if (shouldAffix) {\n setPlaceholderStyle({\n width: contentRect.width,\n height: contentRect.height,\n })\n setAffixStyle(newAffixStyle)\n } else {\n setPlaceholderStyle({})\n setAffixStyle({})\n }\n }\n\n scrollTarget.addEventListener('scroll', handleScroll)\n window.addEventListener('resize', handleScroll)\n handleScroll()\n\n return () => {\n scrollTarget.removeEventListener('scroll', handleScroll)\n window.removeEventListener('resize', handleScroll)\n }\n }, [target, offsetTop, offsetBottom, affixed, onChange])\n\n return (\n <div ref={wrapperRef} className={className} data-state={affixed ? 'affixed' : 'normal'} {...rest}>\n {affixed && <div style={placeholderStyle} />}\n <div ref={contentRef} style={affixStyle}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["Affix","children","offsetTop","offsetBottom","target","onChange","className","rest","affixed","setAffixed","useState","placeholderStyle","setPlaceholderStyle","affixStyle","setAffixStyle","wrapperRef","useRef","contentRef","useEffect","scrollTarget","handleScroll","rect","contentRect","shouldAffix","newAffixStyle","viewportHeight","jsxs","jsx"],"mappings":";;AAeO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAkBC,CAAmB,IAAIF,EAA8B,CAAA,CAAE,GAC1E,CAACG,GAAYC,CAAa,IAAIJ,EAA8B,CAAA,CAAE,GAC9DK,IAAaC,EAAuB,IAAI,GACxCC,IAAaD,EAAuB,IAAI;AAE9C,SAAAE,EAAU,MAAM;AACd,UAAMC,IAAef,IAASA,EAAA,IAAW,QAEnCgB,IAAe,MAAM;AACzB,UAAI,CAACL,EAAW,WAAW,CAACE,EAAW,QAAS;AAEhD,YAAMI,IAAON,EAAW,QAAQ,sBAAA,GAC1BO,IAAcL,EAAW,QAAQ,sBAAA;AAEvC,UAAIM,IAAc,IACdC,IAAqC,CAAA;AAEzC,UAAItB,MAAc;AAEhB,QAAAqB,IAAcF,EAAK,MAAMnB,GACrBqB,MACFC,IAAgB;AAAA,UACd,UAAU;AAAA,UACV,KAAKtB;AAAA,UACL,OAAOmB,EAAK;AAAA,UACZ,QAAQ;AAAA,QAAA;AAAA,eAGHlB,MAAiB,QAAW;AAErC,cAAMsB,IAAiB,OAAO;AAC9B,QAAAF,IAAcF,EAAK,SAASI,IAAiBtB,GACzCoB,MACFC,IAAgB;AAAA,UACd,UAAU;AAAA,UACV,QAAQrB;AAAA,UACR,OAAOkB,EAAK;AAAA,UACZ,QAAQ;AAAA,QAAA;AAAA,MAGd;AAEA,MAAIE,MAAgBf,MAClBC,EAAWc,CAAW,GACtBlB,IAAWkB,CAAW,IAGpBA,KACFX,EAAoB;AAAA,QAClB,OAAOU,EAAY;AAAA,QACnB,QAAQA,EAAY;AAAA,MAAA,CACrB,GACDR,EAAcU,CAAa,MAE3BZ,EAAoB,CAAA,CAAE,GACtBE,EAAc,CAAA,CAAE;AAAA,IAEpB;AAEA,WAAAK,EAAa,iBAAiB,UAAUC,CAAY,GACpD,OAAO,iBAAiB,UAAUA,CAAY,GAC9CA,EAAA,GAEO,MAAM;AACX,MAAAD,EAAa,oBAAoB,UAAUC,CAAY,GACvD,OAAO,oBAAoB,UAAUA,CAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAChB,GAAQF,GAAWC,GAAcK,GAASH,CAAQ,CAAC,GAGrD,gBAAAqB,EAAC,OAAA,EAAI,KAAKX,GAAY,WAAAT,GAAsB,cAAYE,IAAU,YAAY,UAAW,GAAGD,GACzF,UAAA;AAAA,IAAAC,KAAW,gBAAAmB,EAAC,OAAA,EAAI,OAAOhB,EAAA,CAAkB;AAAA,sBACzC,OAAA,EAAI,KAAKM,GAAY,OAAOJ,GAC1B,UAAAZ,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
|
package/dist/index20.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { jsxs as m, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useRef as j, useEffect as y } from "react";
|
|
3
|
+
import { Input as T } from "./index36.js";
|
|
4
|
+
const $ = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], I = [
|
|
5
|
+
"January",
|
|
6
|
+
"February",
|
|
7
|
+
"March",
|
|
8
|
+
"April",
|
|
9
|
+
"May",
|
|
10
|
+
"June",
|
|
11
|
+
"July",
|
|
12
|
+
"August",
|
|
13
|
+
"September",
|
|
14
|
+
"October",
|
|
15
|
+
"November",
|
|
16
|
+
"December"
|
|
17
|
+
];
|
|
18
|
+
function L(t, l = "MM/DD/YYYY") {
|
|
19
|
+
if (!t) return "";
|
|
20
|
+
const u = t.getFullYear(), f = String(t.getMonth() + 1).padStart(2, "0"), g = String(t.getDate()).padStart(2, "0");
|
|
21
|
+
return l.replace("YYYY", String(u)).replace("MM", f).replace("DD", g);
|
|
22
|
+
}
|
|
23
|
+
function q(t, l) {
|
|
24
|
+
return new Date(t, l + 1, 0).getDate();
|
|
25
|
+
}
|
|
26
|
+
function z(t, l) {
|
|
27
|
+
return new Date(t, l, 1).getDay();
|
|
28
|
+
}
|
|
29
|
+
const B = ({
|
|
30
|
+
value: t,
|
|
31
|
+
defaultValue: l,
|
|
32
|
+
onChange: u,
|
|
33
|
+
format: f,
|
|
34
|
+
placeholder: g = "Select date",
|
|
35
|
+
disabled: v = !1,
|
|
36
|
+
className: x = "",
|
|
37
|
+
size: N = "md",
|
|
38
|
+
...Y
|
|
39
|
+
}) => {
|
|
40
|
+
const [o, b] = h(
|
|
41
|
+
t || l || null
|
|
42
|
+
), [c, d] = h(!1), [r, i] = h(
|
|
43
|
+
o ? o.getMonth() : (/* @__PURE__ */ new Date()).getMonth()
|
|
44
|
+
), [a, p] = h(
|
|
45
|
+
o ? o.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear()
|
|
46
|
+
), w = j(null);
|
|
47
|
+
y(() => {
|
|
48
|
+
t !== void 0 && b(t);
|
|
49
|
+
}, [t]), y(() => {
|
|
50
|
+
function e(s) {
|
|
51
|
+
w.current && !w.current.contains(s.target) && d(!1);
|
|
52
|
+
}
|
|
53
|
+
if (c)
|
|
54
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
55
|
+
}, [c]);
|
|
56
|
+
const S = (e) => {
|
|
57
|
+
const s = new Date(a, r, e);
|
|
58
|
+
b(s), u?.(s), d(!1);
|
|
59
|
+
}, F = () => {
|
|
60
|
+
r === 0 ? (i(11), p(a - 1)) : i(r - 1);
|
|
61
|
+
}, O = () => {
|
|
62
|
+
r === 11 ? (i(0), p(a + 1)) : i(r + 1);
|
|
63
|
+
}, k = q(a, r), C = z(a, r), D = [];
|
|
64
|
+
for (let e = 0; e < C; e++)
|
|
65
|
+
D.push(null);
|
|
66
|
+
for (let e = 1; e <= k; e++)
|
|
67
|
+
D.push(e);
|
|
68
|
+
const M = (e) => !e || !o ? !1 : o.getDate() === e && o.getMonth() === r && o.getFullYear() === a, R = (e) => {
|
|
69
|
+
if (!e) return !1;
|
|
70
|
+
const s = /* @__PURE__ */ new Date();
|
|
71
|
+
return s.getDate() === e && s.getMonth() === r && s.getFullYear() === a;
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ m("div", { ref: w, className: `relative ${x}`, "data-state": c ? "open" : "closed", ...Y, children: [
|
|
74
|
+
/* @__PURE__ */ n(
|
|
75
|
+
T,
|
|
76
|
+
{
|
|
77
|
+
value: L(o, f),
|
|
78
|
+
placeholder: g,
|
|
79
|
+
disabled: v,
|
|
80
|
+
size: N,
|
|
81
|
+
readOnly: !0,
|
|
82
|
+
onClick: () => !v && d(!c),
|
|
83
|
+
className: "cursor-pointer"
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
c && /* @__PURE__ */ m("div", { className: "absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-lg p-4 z-50 w-80", children: [
|
|
87
|
+
/* @__PURE__ */ m("div", { className: "flex items-center justify-between mb-4", children: [
|
|
88
|
+
/* @__PURE__ */ n(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: F,
|
|
93
|
+
className: "btn btn-ghost btn-sm btn-square",
|
|
94
|
+
children: /* @__PURE__ */ n(
|
|
95
|
+
"svg",
|
|
96
|
+
{
|
|
97
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
98
|
+
className: "h-5 w-5",
|
|
99
|
+
viewBox: "0 0 20 20",
|
|
100
|
+
fill: "currentColor",
|
|
101
|
+
children: /* @__PURE__ */ n(
|
|
102
|
+
"path",
|
|
103
|
+
{
|
|
104
|
+
fillRule: "evenodd",
|
|
105
|
+
d: "M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z",
|
|
106
|
+
clipRule: "evenodd"
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
/* @__PURE__ */ m("div", { className: "text-base font-semibold", children: [
|
|
114
|
+
I[r],
|
|
115
|
+
" ",
|
|
116
|
+
a
|
|
117
|
+
] }),
|
|
118
|
+
/* @__PURE__ */ n(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
onClick: O,
|
|
123
|
+
className: "btn btn-ghost btn-sm btn-square",
|
|
124
|
+
children: /* @__PURE__ */ n(
|
|
125
|
+
"svg",
|
|
126
|
+
{
|
|
127
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
128
|
+
className: "h-5 w-5",
|
|
129
|
+
viewBox: "0 0 20 20",
|
|
130
|
+
fill: "currentColor",
|
|
131
|
+
children: /* @__PURE__ */ n(
|
|
132
|
+
"path",
|
|
133
|
+
{
|
|
134
|
+
fillRule: "evenodd",
|
|
135
|
+
d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",
|
|
136
|
+
clipRule: "evenodd"
|
|
137
|
+
}
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1 mb-2", children: $.map((e) => /* @__PURE__ */ n(
|
|
145
|
+
"div",
|
|
146
|
+
{
|
|
147
|
+
className: "text-center text-xs font-semibold text-base-content/60 py-2",
|
|
148
|
+
children: e
|
|
149
|
+
},
|
|
150
|
+
e
|
|
151
|
+
)) }),
|
|
152
|
+
/* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1", children: D.map((e, s) => /* @__PURE__ */ n(
|
|
153
|
+
"button",
|
|
154
|
+
{
|
|
155
|
+
type: "button",
|
|
156
|
+
disabled: !e,
|
|
157
|
+
onClick: () => e && S(e),
|
|
158
|
+
className: `
|
|
159
|
+
aspect-square flex items-center justify-center text-sm rounded-lg
|
|
160
|
+
${e ? "hover:bg-base-200" : "invisible"}
|
|
161
|
+
${M(e) ? "bg-primary text-primary-content hover:bg-primary/90" : ""}
|
|
162
|
+
${R(e) && !M(e) ? "border border-primary" : ""}
|
|
163
|
+
${e ? "cursor-pointer" : ""}
|
|
164
|
+
`,
|
|
165
|
+
children: e
|
|
166
|
+
},
|
|
167
|
+
s
|
|
168
|
+
)) }),
|
|
169
|
+
/* @__PURE__ */ n("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ n(
|
|
170
|
+
"button",
|
|
171
|
+
{
|
|
172
|
+
type: "button",
|
|
173
|
+
onClick: () => {
|
|
174
|
+
const e = /* @__PURE__ */ new Date();
|
|
175
|
+
b(e), i(e.getMonth()), p(e.getFullYear()), u?.(e), d(!1);
|
|
176
|
+
},
|
|
177
|
+
className: "btn btn-ghost btn-sm",
|
|
178
|
+
children: "Today"
|
|
179
|
+
}
|
|
180
|
+
) })
|
|
181
|
+
] })
|
|
182
|
+
] });
|
|
183
|
+
};
|
|
184
|
+
export {
|
|
185
|
+
B as DatePicker
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=index20.js.map
|