asterui 0.12.29 → 0.12.31
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/chart.d.ts +2 -0
- package/dist/chart.js +5 -0
- package/dist/chart.js.map +1 -0
- package/dist/{index2.js → components/Affix.js} +1 -1
- package/dist/components/Affix.js.map +1 -0
- package/dist/{index4.js → components/Alert.js} +1 -1
- package/dist/components/Alert.js.map +1 -0
- package/dist/{index3.js → components/Anchor.js} +1 -1
- package/dist/components/Anchor.js.map +1 -0
- package/dist/{index5.js → components/Autocomplete.js} +1 -1
- package/dist/components/Autocomplete.js.map +1 -0
- package/dist/{index6.js → components/Avatar.js} +1 -1
- package/dist/components/Avatar.js.map +1 -0
- package/dist/{index7.js → components/Badge.js} +1 -1
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Breadcrumb.js +38 -0
- package/dist/components/Breadcrumb.js.map +1 -0
- package/dist/{index53.js → components/Browser.js} +1 -1
- package/dist/components/Browser.js.map +1 -0
- package/dist/{index9.js → components/Button.js} +1 -1
- package/dist/components/Button.js.map +1 -0
- package/dist/{index14.js → components/Card.js} +22 -22
- package/dist/{index14.js.map → components/Card.js.map} +1 -1
- package/dist/{index17.js → components/Carousel.js} +1 -1
- package/dist/components/Carousel.js.map +1 -0
- package/dist/{index15.js → components/Cascader.js} +1 -1
- package/dist/components/Cascader.js.map +1 -0
- package/dist/{index16.js → components/Chart.js} +1 -1
- package/dist/components/Chart.js.map +1 -0
- package/dist/{index12.js → components/Chat.js} +1 -1
- package/dist/{index12.js.map → components/Chat.js.map} +1 -1
- package/dist/{index11.js → components/Checkbox.js} +15 -15
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/{index54.js → components/Code.js} +5 -5
- package/dist/{index54.js.map → components/Code.js.map} +1 -1
- package/dist/{index18.js → components/Collapse.js} +1 -1
- package/dist/components/Collapse.js.map +1 -0
- package/dist/components/ColorPicker.d.ts +8 -2
- package/dist/components/ColorPicker.js +366 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/{index19.js → components/Container.js} +1 -1
- package/dist/components/Container.js.map +1 -0
- package/dist/{index20.js → components/ContextMenu.js} +9 -9
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/{index10.js → components/CopyButton.js} +2 -2
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/{index21.js → components/Countdown.js} +1 -1
- package/dist/components/Countdown.js.map +1 -0
- package/dist/{index22.js → components/DatePicker.js} +2 -2
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/{index23.js → components/Descriptions.js} +23 -23
- package/dist/components/Descriptions.js.map +1 -0
- package/dist/{index24.js → components/Diff.js} +1 -1
- package/dist/{index24.js.map → components/Diff.js.map} +1 -1
- package/dist/{index26.js → components/Divider.js} +1 -1
- package/dist/components/Divider.js.map +1 -0
- package/dist/{index25.js → components/Dock.js} +1 -1
- package/dist/{index25.js.map → components/Dock.js.map} +1 -1
- package/dist/{index27.js → components/Drawer.js} +1 -1
- package/dist/components/Drawer.js.map +1 -0
- package/dist/{index40.js → components/Dropdown.js} +31 -31
- package/dist/components/Dropdown.js.map +1 -0
- package/dist/{index41.js → components/Empty.js} +1 -1
- package/dist/components/Empty.js.map +1 -0
- package/dist/{index29.js → components/Fieldset.js} +1 -1
- package/dist/components/Fieldset.js.map +1 -0
- package/dist/{index30.js → components/FileInput.js} +1 -1
- package/dist/components/FileInput.js.map +1 -0
- package/dist/{index31.js → components/Filter.js} +1 -1
- package/dist/components/Filter.js.map +1 -0
- package/dist/{index32.js → components/Flex.js} +1 -1
- package/dist/{index32.js.map → components/Flex.js.map} +1 -1
- package/dist/{index33.js → components/FloatButton.js} +1 -1
- package/dist/components/FloatButton.js.map +1 -0
- package/dist/{index34.js → components/Footer.js} +1 -1
- package/dist/components/Footer.js.map +1 -0
- package/dist/{index35.js → components/Form.js} +1 -1
- package/dist/{index35.js.map → components/Form.js.map} +1 -1
- package/dist/{index36.js → components/Grid.js} +6 -6
- package/dist/{index36.js.map → components/Grid.js.map} +1 -1
- package/dist/{index37.js → components/Hero.js} +1 -1
- package/dist/{index37.js.map → components/Hero.js.map} +1 -1
- package/dist/{index38.js → components/HoverGallery.js} +1 -1
- package/dist/components/HoverGallery.js.map +1 -0
- package/dist/{index39.js → components/Image.js} +1 -1
- package/dist/components/Image.js.map +1 -0
- package/dist/{index42.js → components/Input.js} +1 -1
- package/dist/components/Input.js.map +1 -0
- package/dist/{index43.js → components/InputNumber.js} +1 -1
- package/dist/components/InputNumber.js.map +1 -0
- package/dist/components/Join.js +18 -0
- package/dist/{index44.js.map → components/Join.js.map} +1 -1
- package/dist/{index45.js → components/Kbd.js} +1 -1
- package/dist/components/Kbd.js.map +1 -0
- package/dist/{index46.js → components/Layout.js} +16 -16
- package/dist/components/Layout.js.map +1 -0
- package/dist/{index47.js → components/List.js} +17 -17
- package/dist/{index47.js.map → components/List.js.map} +1 -1
- package/dist/{index48.js → components/Loading.js} +1 -1
- package/dist/components/Loading.js.map +1 -0
- package/dist/{index49.js → components/Mask.js} +1 -1
- package/dist/{index49.js.map → components/Mask.js.map} +1 -1
- package/dist/{index50.js → components/Masonry.js} +19 -19
- package/dist/components/Masonry.js.map +1 -0
- package/dist/{index51.js → components/Mention.js} +1 -1
- package/dist/components/Mention.js.map +1 -0
- package/dist/{index52.js → components/Menu.js} +1 -1
- package/dist/{index52.js.map → components/Menu.js.map} +1 -1
- package/dist/{index57.js → components/Modal.js} +23 -23
- package/dist/components/Modal.js.map +1 -0
- package/dist/{index58.js → components/Navbar.js} +1 -1
- package/dist/components/Navbar.js.map +1 -0
- package/dist/{index59.js → components/Notification.js} +1 -1
- package/dist/components/Notification.js.map +1 -0
- package/dist/{index60.js → components/OTPInput.js} +1 -1
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/{index62.js → components/PageLayout.js} +1 -1
- package/dist/components/PageLayout.js.map +1 -0
- package/dist/{index61.js → components/Pagination.js} +18 -18
- package/dist/components/Pagination.js.map +1 -0
- package/dist/{index55.js → components/Phone.js} +1 -1
- package/dist/components/Phone.js.map +1 -0
- package/dist/{index63.js → components/Popconfirm.js} +14 -14
- package/dist/components/Popconfirm.js.map +1 -0
- package/dist/{index64.js → components/Popover.js} +1 -1
- package/dist/components/Popover.js.map +1 -0
- package/dist/{index65.js → components/Progress.js} +1 -1
- package/dist/components/Progress.js.map +1 -0
- package/dist/{index66.js → components/QRCode.js} +1 -1
- package/dist/components/QRCode.js.map +1 -0
- package/dist/{index68.js → components/RadialProgress.js} +1 -1
- package/dist/components/RadialProgress.js.map +1 -0
- package/dist/{index67.js → components/Radio.js} +13 -13
- package/dist/components/Radio.js.map +1 -0
- package/dist/{index69.js → components/Range.js} +1 -1
- package/dist/components/Range.js.map +1 -0
- package/dist/{index70.js → components/Rating.js} +20 -20
- package/dist/components/Rating.js.map +1 -0
- package/dist/{index98.js → components/Responsive.js} +2 -2
- package/dist/components/Responsive.js.map +1 -0
- package/dist/{index71.js → components/Result.js} +1 -1
- package/dist/components/Result.js.map +1 -0
- package/dist/{index73.js → components/Segmented.js} +1 -1
- package/dist/components/Segmented.js.map +1 -0
- package/dist/{index72.js → components/Select.js} +1 -1
- package/dist/components/Select.js.map +1 -0
- package/dist/{index28.js → components/SidebarDrawer.js} +3 -3
- package/dist/components/SidebarDrawer.js.map +1 -0
- package/dist/{index74.js → components/Skeleton.js} +1 -1
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/Space.js +61 -0
- package/dist/components/Space.js.map +1 -0
- package/dist/{index76.js → components/Splitter.js} +22 -22
- package/dist/components/Splitter.js.map +1 -0
- package/dist/{index77.js → components/Stat.js} +1 -1
- package/dist/{index77.js.map → components/Stat.js.map} +1 -1
- package/dist/{index78.js → components/Status.js} +1 -1
- package/dist/components/Status.js.map +1 -0
- package/dist/{index79.js → components/Steps.js} +14 -14
- package/dist/components/Steps.js.map +1 -0
- package/dist/{index80.js → components/Table.js} +92 -92
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +83 -0
- package/dist/{index81.js.map → components/Tabs.js.map} +1 -1
- package/dist/{index84.js → components/Tag.js} +1 -1
- package/dist/components/Tag.js.map +1 -0
- package/dist/{index83.js → components/TextRotate.js} +1 -1
- package/dist/components/TextRotate.js.map +1 -0
- package/dist/{index82.js → components/Textarea.js} +1 -1
- package/dist/components/Textarea.js.map +1 -0
- package/dist/{index85.js → components/ThemeController.js} +1 -1
- package/dist/components/ThemeController.js.map +1 -0
- package/dist/{index86.js → components/TimePicker.js} +2 -2
- package/dist/components/TimePicker.js.map +1 -0
- package/dist/{index87.js → components/Timeline.js} +13 -13
- package/dist/components/Timeline.js.map +1 -0
- package/dist/{index88.js → components/Toggle.js} +1 -1
- package/dist/components/Toggle.js.map +1 -0
- package/dist/{index90.js → components/Tooltip.js} +1 -1
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/{index89.js → components/Tour.js} +1 -1
- package/dist/{index89.js.map → components/Tour.js.map} +1 -1
- package/dist/{index91.js → components/Transfer.js} +1 -1
- package/dist/components/Transfer.js.map +1 -0
- package/dist/{index92.js → components/Tree.js} +1 -1
- package/dist/{index92.js.map → components/Tree.js.map} +1 -1
- package/dist/{index93.js → components/TreeSelect.js} +44 -44
- package/dist/components/TreeSelect.js.map +1 -0
- package/dist/{index94.js → components/Typography.js} +1 -1
- package/dist/components/Typography.js.map +1 -0
- package/dist/{index95.js → components/Upload.js} +1 -1
- package/dist/components/Upload.js.map +1 -0
- package/dist/{index96.js → components/VirtualList.js} +2 -2
- package/dist/components/VirtualList.js.map +1 -0
- package/dist/{index97.js → components/Watermark.js} +1 -1
- package/dist/components/Watermark.js.map +1 -0
- package/dist/{index56.js → components/Window.js} +1 -1
- package/dist/components/Window.js.map +1 -0
- package/dist/{index99.js → hooks/useBreakpoint.js} +1 -1
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/{index104.js → hooks/useClickOutside.js} +1 -1
- package/dist/hooks/useClickOutside.js.map +1 -0
- package/dist/{index101.js → hooks/useClipboard.js} +1 -1
- package/dist/hooks/useClipboard.js.map +1 -0
- package/dist/{index103.js → hooks/useDebounce.js} +1 -1
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/{index100.js → hooks/useDisclosure.js} +1 -1
- package/dist/hooks/useDisclosure.js.map +1 -0
- package/dist/{index106.js → hooks/useHover.js} +1 -1
- package/dist/hooks/useHover.js.map +1 -0
- package/dist/{index107.js → hooks/useKeyPress.js} +1 -1
- package/dist/hooks/useKeyPress.js.map +1 -0
- package/dist/{index102.js → hooks/useLocalStorage.js} +1 -1
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/{index105.js → hooks/usePrevious.js} +1 -1
- package/dist/hooks/usePrevious.js.map +1 -0
- package/dist/{index108.js → hooks/useWindowSize.js} +1 -1
- package/dist/hooks/useWindowSize.js.map +1 -0
- package/dist/index.d.ts +1 -7
- package/dist/index.js +204 -210
- package/dist/index.js.map +1 -1
- package/dist/qrcode.d.ts +2 -0
- package/dist/qrcode.js +5 -0
- package/dist/qrcode.js.map +1 -0
- package/dist/virtuallist.d.ts +2 -0
- package/dist/virtuallist.js +5 -0
- package/dist/virtuallist.js.map +1 -0
- package/package.json +13 -1
- package/dist/index10.js.map +0 -1
- package/dist/index100.js.map +0 -1
- package/dist/index101.js.map +0 -1
- package/dist/index102.js.map +0 -1
- package/dist/index103.js.map +0 -1
- package/dist/index104.js.map +0 -1
- package/dist/index105.js.map +0 -1
- package/dist/index106.js.map +0 -1
- package/dist/index107.js.map +0 -1
- package/dist/index108.js.map +0 -1
- package/dist/index109.js +0 -36
- package/dist/index109.js.map +0 -1
- package/dist/index11.js.map +0 -1
- package/dist/index110.js +0 -523
- package/dist/index110.js.map +0 -1
- package/dist/index111.js +0 -53
- package/dist/index111.js.map +0 -1
- package/dist/index13.js +0 -268
- package/dist/index13.js.map +0 -1
- package/dist/index15.js.map +0 -1
- package/dist/index16.js.map +0 -1
- package/dist/index17.js.map +0 -1
- package/dist/index18.js.map +0 -1
- package/dist/index19.js.map +0 -1
- package/dist/index2.js.map +0 -1
- package/dist/index20.js.map +0 -1
- package/dist/index21.js.map +0 -1
- package/dist/index22.js.map +0 -1
- package/dist/index23.js.map +0 -1
- package/dist/index26.js.map +0 -1
- package/dist/index27.js.map +0 -1
- package/dist/index28.js.map +0 -1
- package/dist/index29.js.map +0 -1
- package/dist/index3.js.map +0 -1
- package/dist/index30.js.map +0 -1
- package/dist/index31.js.map +0 -1
- package/dist/index33.js.map +0 -1
- package/dist/index34.js.map +0 -1
- package/dist/index38.js.map +0 -1
- package/dist/index39.js.map +0 -1
- package/dist/index4.js.map +0 -1
- package/dist/index40.js.map +0 -1
- package/dist/index41.js.map +0 -1
- package/dist/index42.js.map +0 -1
- package/dist/index43.js.map +0 -1
- package/dist/index44.js +0 -18
- package/dist/index45.js.map +0 -1
- package/dist/index46.js.map +0 -1
- package/dist/index48.js.map +0 -1
- package/dist/index5.js.map +0 -1
- package/dist/index50.js.map +0 -1
- package/dist/index51.js.map +0 -1
- package/dist/index53.js.map +0 -1
- package/dist/index55.js.map +0 -1
- package/dist/index56.js.map +0 -1
- package/dist/index57.js.map +0 -1
- package/dist/index58.js.map +0 -1
- package/dist/index59.js.map +0 -1
- package/dist/index6.js.map +0 -1
- package/dist/index60.js.map +0 -1
- package/dist/index61.js.map +0 -1
- package/dist/index62.js.map +0 -1
- package/dist/index63.js.map +0 -1
- package/dist/index64.js.map +0 -1
- package/dist/index65.js.map +0 -1
- package/dist/index66.js.map +0 -1
- package/dist/index67.js.map +0 -1
- package/dist/index68.js.map +0 -1
- package/dist/index69.js.map +0 -1
- package/dist/index7.js.map +0 -1
- package/dist/index70.js.map +0 -1
- package/dist/index71.js.map +0 -1
- package/dist/index72.js.map +0 -1
- package/dist/index73.js.map +0 -1
- package/dist/index74.js.map +0 -1
- package/dist/index75.js +0 -61
- package/dist/index75.js.map +0 -1
- package/dist/index76.js.map +0 -1
- package/dist/index78.js.map +0 -1
- package/dist/index79.js.map +0 -1
- package/dist/index8.js +0 -38
- package/dist/index8.js.map +0 -1
- package/dist/index80.js.map +0 -1
- package/dist/index81.js +0 -83
- package/dist/index82.js.map +0 -1
- package/dist/index83.js.map +0 -1
- package/dist/index84.js.map +0 -1
- package/dist/index85.js.map +0 -1
- package/dist/index86.js.map +0 -1
- package/dist/index87.js.map +0 -1
- package/dist/index88.js.map +0 -1
- package/dist/index9.js.map +0 -1
- package/dist/index90.js.map +0 -1
- package/dist/index91.js.map +0 -1
- package/dist/index93.js.map +0 -1
- package/dist/index94.js.map +0 -1
- package/dist/index95.js.map +0 -1
- package/dist/index96.js.map +0 -1
- package/dist/index97.js.map +0 -1
- package/dist/index98.js.map +0 -1
- package/dist/index99.js.map +0 -1
package/dist/index81.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { jsx as a, jsxs as c, Fragment as o } from "react/jsx-runtime";
|
|
2
|
-
import u, { useState as k } from "react";
|
|
3
|
-
const B = {
|
|
4
|
-
box: "tabs-box",
|
|
5
|
-
border: "tabs-border",
|
|
6
|
-
lift: "tabs-lift"
|
|
7
|
-
}, R = {
|
|
8
|
-
xs: "tabs-xs",
|
|
9
|
-
sm: "tabs-sm",
|
|
10
|
-
md: "tabs-md",
|
|
11
|
-
lg: "tabs-lg",
|
|
12
|
-
xl: "tabs-xl"
|
|
13
|
-
};
|
|
14
|
-
function _({
|
|
15
|
-
children: s,
|
|
16
|
-
items: e,
|
|
17
|
-
activeKey: n,
|
|
18
|
-
defaultActiveKey: y,
|
|
19
|
-
onChange: K,
|
|
20
|
-
variant: b,
|
|
21
|
-
size: r,
|
|
22
|
-
position: d = "top",
|
|
23
|
-
className: p = "",
|
|
24
|
-
...C
|
|
25
|
-
}) {
|
|
26
|
-
const g = u.Children.toArray(s).filter(
|
|
27
|
-
(t) => u.isValidElement(t) && t.type === x
|
|
28
|
-
), l = e && e.length > 0 ? e.map((t) => ({
|
|
29
|
-
tabKey: t.key,
|
|
30
|
-
tab: t.label,
|
|
31
|
-
children: t.children,
|
|
32
|
-
disabled: t.disabled,
|
|
33
|
-
icon: t.icon
|
|
34
|
-
})) : g.map((t) => t.props), [j, A] = k(
|
|
35
|
-
y || l[0]?.tabKey || ""
|
|
36
|
-
), f = n !== void 0 ? n : j, N = (t) => {
|
|
37
|
-
n === void 0 && A(t), K?.(t);
|
|
38
|
-
}, P = [
|
|
39
|
-
"tabs",
|
|
40
|
-
b && B[b],
|
|
41
|
-
r && R[r],
|
|
42
|
-
p
|
|
43
|
-
].filter(Boolean).join(" "), m = l.find((t) => t.tabKey === f), h = /* @__PURE__ */ a("div", { role: "tablist", className: P, children: l.map((t) => {
|
|
44
|
-
const i = f === t.tabKey, T = [
|
|
45
|
-
"tab",
|
|
46
|
-
i && "tab-active",
|
|
47
|
-
t.disabled && "tab-disabled"
|
|
48
|
-
].filter(Boolean).join(" ");
|
|
49
|
-
return /* @__PURE__ */ c(
|
|
50
|
-
"button",
|
|
51
|
-
{
|
|
52
|
-
role: "tab",
|
|
53
|
-
className: T,
|
|
54
|
-
onClick: () => !t.disabled && N(t.tabKey),
|
|
55
|
-
disabled: t.disabled,
|
|
56
|
-
"data-state": i ? "active" : "inactive",
|
|
57
|
-
"aria-selected": i,
|
|
58
|
-
children: [
|
|
59
|
-
t.icon && /* @__PURE__ */ a("span", { className: "mr-1", children: t.icon }),
|
|
60
|
-
t.tab
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
t.tabKey
|
|
64
|
-
);
|
|
65
|
-
}) }), v = m && /* @__PURE__ */ a("div", { className: d === "top" ? "mt-4" : "mb-4", role: "tabpanel", children: m.children });
|
|
66
|
-
return /* @__PURE__ */ a("div", { ...C, children: d === "top" ? /* @__PURE__ */ c(o, { children: [
|
|
67
|
-
h,
|
|
68
|
-
v
|
|
69
|
-
] }) : /* @__PURE__ */ c(o, { children: [
|
|
70
|
-
v,
|
|
71
|
-
h
|
|
72
|
-
] }) });
|
|
73
|
-
}
|
|
74
|
-
function x({ children: s }) {
|
|
75
|
-
return /* @__PURE__ */ a(o, { children: s });
|
|
76
|
-
}
|
|
77
|
-
const I = Object.assign(_, {
|
|
78
|
-
Panel: x
|
|
79
|
-
});
|
|
80
|
-
export {
|
|
81
|
-
I as Tabs
|
|
82
|
-
};
|
|
83
|
-
//# sourceMappingURL=index81.js.map
|
package/dist/index82.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index82.js","sources":["../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n xs: 'textarea-xs',\n sm: 'textarea-sm',\n md: 'textarea-md',\n lg: 'textarea-lg',\n xl: 'textarea-xl',\n }\n\n const colorClasses = {\n neutral: 'textarea-neutral',\n primary: 'textarea-primary',\n secondary: 'textarea-secondary',\n accent: 'textarea-accent',\n info: 'textarea-info',\n success: 'textarea-success',\n warning: 'textarea-warning',\n error: 'textarea-error',\n }\n\n const textareaClasses = [\n 'textarea',\n 'w-full',\n bordered && 'textarea-bordered',\n ghost && 'textarea-ghost',\n size && sizeClasses[size],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <textarea ref={ref} className={textareaClasses} {...props} />\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["Textarea","forwardRef","size","color","ghost","bordered","className","props","ref","sizeClasses","colorClasses","textareaClasses"],"mappings":";;AAUO,MAAMA,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAGAC,IAAe;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAGHC,IAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACAN,KAAY;AAAA,MACZD,KAAS;AAAA,MACTF,KAAQO,EAAYP,CAAI;AAAA,MACxBC,KAASO,EAAaP,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BAAQ,YAAA,EAAS,KAAAE,GAAU,WAAWG,GAAkB,GAAGJ,GAAO;AAAA,EACpE;AACF;AAEAP,EAAS,cAAc;"}
|
package/dist/index83.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index83.js","sources":["../src/components/TextRotate.tsx"],"sourcesContent":["import React from 'react'\n\nexport type TextRotateDuration = 6000 | 9000 | 12000 | 15000 | 18000\n\nconst durationClasses: Record<TextRotateDuration, string> = {\n 6000: 'duration-6000',\n 9000: 'duration-9000',\n 12000: 'duration-12000',\n 15000: 'duration-15000',\n 18000: 'duration-18000',\n}\n\nexport interface TextRotateProps {\n /** Text items to rotate through (max 6) */\n items: React.ReactNode[]\n /** Animation duration in ms (default 10000) */\n duration?: TextRotateDuration\n /** Center text horizontally */\n centered?: boolean\n /** Additional CSS classes */\n className?: string\n}\n\nexport const TextRotate: React.FC<TextRotateProps> = ({\n items,\n duration,\n centered = false,\n className = '',\n}) => {\n const durationClass = duration ? durationClasses[duration] : ''\n\n return (\n <span\n className={`text-rotate ${durationClass} ${centered ? 'justify-items-center' : ''} ${className}`.trim()}\n >\n <span>\n {items.slice(0, 6).map((item, index) => (\n <span key={index}>{item}</span>\n ))}\n </span>\n </span>\n )\n}\n"],"names":["durationClasses","TextRotate","items","duration","centered","className","durationClass","jsx","item","index"],"mappings":";AAIA,MAAMA,IAAsD;AAAA,EAC1D,KAAM;AAAA,EACN,KAAM;AAAA,EACN,MAAO;AAAA,EACP,MAAO;AAAA,EACP,MAAO;AACT,GAaaC,IAAwC,CAAC;AAAA,EACpD,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AACd,MAAM;AACJ,QAAMC,IAAgBH,IAAWH,EAAgBG,CAAQ,IAAI;AAE7D,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAeD,CAAa,IAAIF,IAAW,yBAAyB,EAAE,IAAIC,CAAS,GAAG,KAAA;AAAA,MAEjG,4BAAC,QAAA,EACE,UAAAH,EAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAACM,GAAMC,MAC5B,gBAAAF,EAAC,QAAA,EAAkB,UAAAC,EAAA,GAARC,CAAa,CACzB,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
package/dist/index84.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index84.js","sources":["../src/components/Tag.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\n\nexport type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TagColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'neutral'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'ghost'\n\nexport type TagVariant = 'filled' | 'outlined' | 'soft' | 'dash'\n\nexport interface TagProps extends Omit<React.HTMLAttributes<HTMLElement>, 'color'> {\n closable?: boolean\n closeIcon?: React.ReactNode\n onClose?: () => void\n color?: TagColor | string\n icon?: React.ReactNode\n size?: TagSize\n variant?: TagVariant\n visible?: boolean\n disabled?: boolean\n href?: string\n target?: string\n children?: React.ReactNode\n 'data-testid'?: string\n 'aria-label'?: string\n}\n\nexport interface CheckableTagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange' | 'color'> {\n checked?: boolean\n onChange?: (checked: boolean) => void\n icon?: React.ReactNode\n size?: TagSize\n color?: TagColor\n disabled?: boolean\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nconst colorClasses: Record<string, string> = {\n primary: 'badge-primary',\n secondary: 'badge-secondary',\n accent: 'badge-accent',\n neutral: 'badge-neutral',\n info: 'badge-info',\n success: 'badge-success',\n warning: 'badge-warning',\n error: 'badge-error',\n ghost: 'badge-ghost',\n}\n\nconst sizeClasses: Record<TagSize, string> = {\n xs: 'badge-xs text-xs',\n sm: 'badge-sm text-sm',\n md: 'badge-md',\n lg: 'badge-lg text-lg',\n xl: 'badge-xl text-xl',\n}\n\nconst variantClasses: Record<TagVariant, string> = {\n filled: '',\n outlined: 'badge-outline',\n soft: 'badge-soft',\n dash: 'badge-dash',\n}\n\nconst TagLiveRegion: React.FC = () => (\n <div\n id=\"tag-live-region\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n style={{ position: 'absolute', width: 1, height: 1, padding: 0, margin: -1, overflow: 'hidden', clip: 'rect(0, 0, 0, 0)', whiteSpace: 'nowrap', border: 0 }}\n />\n)\n\nconst announceTagRemoval = (label: string) => {\n const region = document.getElementById('tag-live-region')\n if (region) {\n region.textContent = `${label} removed`\n setTimeout(() => {\n region.textContent = ''\n }, 1000)\n }\n}\n\nexport const Tag = forwardRef<HTMLElement, TagProps>(\n (\n {\n closable = false,\n closeIcon,\n onClose,\n color,\n icon,\n size = 'md',\n variant = 'filled',\n visible: controlledVisible,\n disabled = false,\n href,\n target,\n children,\n className = '',\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const [internalVisible, setInternalVisible] = useState(true)\n const isControlled = controlledVisible !== undefined\n const visible = isControlled ? controlledVisible : internalVisible\n const baseTestId = testId ?? 'tag'\n const tagLabel = ariaLabel ?? (typeof children === 'string' ? children : 'tag')\n\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n if (disabled) return\n if (!isControlled) {\n setInternalVisible(false)\n }\n announceTagRemoval(tagLabel)\n onClose?.()\n }\n\n const handleCloseKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClose(e as unknown as React.MouseEvent)\n }\n }\n\n if (!visible) return null\n\n const colorClass = color && colorClasses[color] ? colorClasses[color] : ''\n const customColorStyle =\n color && !colorClasses[color] ? { backgroundColor: color, borderColor: color } : undefined\n\n const tagClasses = [\n 'badge gap-1 inline-flex items-center',\n colorClass,\n sizeClasses[size],\n variantClasses[variant],\n disabled && 'opacity-50 cursor-not-allowed',\n href && !disabled && 'cursor-pointer hover:opacity-80',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const content = (\n <>\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n onKeyDown={handleCloseKeyDown}\n disabled={disabled}\n className=\"btn btn-ghost btn-xs p-0 min-h-0 h-auto hover:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-1 rounded\"\n aria-label={`Remove ${tagLabel}`}\n data-testid={`${baseTestId}-close`}\n >\n {closeIcon || (\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )}\n </button>\n )}\n </>\n )\n\n if (href && !disabled) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n className={tagClasses}\n style={customColorStyle}\n data-testid={baseTestId}\n data-disabled={disabled || undefined}\n {...rest}\n >\n {content}\n </a>\n )\n }\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={tagClasses}\n style={customColorStyle}\n data-testid={baseTestId}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n {...rest}\n >\n {content}\n </span>\n )\n }\n)\n\nTag.displayName = 'Tag'\n\nconst checkedColorClasses: Record<TagColor, string> = {\n primary: 'badge-primary',\n secondary: 'badge-secondary',\n accent: 'badge-accent',\n neutral: 'badge-neutral',\n info: 'badge-info',\n success: 'badge-success',\n warning: 'badge-warning',\n error: 'badge-error',\n ghost: 'badge-ghost',\n}\n\nconst uncheckedColorClasses: Record<TagColor, string> = {\n primary: 'badge-outline hover:badge-primary hover:badge-outline',\n secondary: 'badge-outline hover:badge-secondary hover:badge-outline',\n accent: 'badge-outline hover:badge-accent hover:badge-outline',\n neutral: 'badge-outline hover:badge-neutral hover:badge-outline',\n info: 'badge-outline hover:badge-info hover:badge-outline',\n success: 'badge-outline hover:badge-success hover:badge-outline',\n warning: 'badge-outline hover:badge-warning hover:badge-outline',\n error: 'badge-outline hover:badge-error hover:badge-outline',\n ghost: 'badge-outline hover:badge-ghost hover:badge-outline',\n}\n\nexport const CheckableTag = forwardRef<HTMLSpanElement, CheckableTagProps>(\n (\n {\n checked = false,\n onChange,\n icon,\n size = 'md',\n color = 'primary',\n disabled = false,\n children,\n className = '',\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const baseTestId = testId ?? 'checkable-tag'\n\n const handleClick = () => {\n if (disabled) return\n onChange?.(!checked)\n }\n\n const tagClasses = [\n 'badge gap-1 cursor-pointer transition-colors',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-2',\n sizeClasses[size],\n checked ? checkedColorClasses[color] : uncheckedColorClasses[color],\n disabled && 'opacity-50 cursor-not-allowed',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span\n ref={ref}\n className={tagClasses}\n onClick={handleClick}\n role=\"checkbox\"\n aria-checked={checked}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n data-testid={baseTestId}\n data-state={checked ? 'checked' : 'unchecked'}\n data-disabled={disabled || undefined}\n {...rest}\n >\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n </span>\n )\n }\n)\n\nCheckableTag.displayName = 'CheckableTag'\n\nexport { TagLiveRegion }\n"],"names":["colorClasses","sizeClasses","variantClasses","TagLiveRegion","jsx","announceTagRemoval","label","region","Tag","forwardRef","closable","closeIcon","onClose","color","icon","size","variant","controlledVisible","disabled","href","target","children","className","testId","ariaLabel","rest","ref","internalVisible","setInternalVisible","useState","isControlled","visible","baseTestId","tagLabel","handleClose","e","handleCloseKeyDown","colorClass","customColorStyle","tagClasses","content","jsxs","Fragment","checkedColorClasses","uncheckedColorClasses","CheckableTag","checked","onChange","handleClick"],"mappings":"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"}
|
package/dist/index85.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index85.js","sources":["../src/components/ThemeController.tsx"],"sourcesContent":["import React, { useState, useEffect, useId } from 'react'\n\nexport interface ThemeControllerSwapProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerDropdownProps {\n themes: string[]\n defaultTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerToggleProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n size?: 'xs' | 'sm' | 'md' | 'lg'\n className?: string\n}\n\n// Get current theme from document\nfunction getCurrentTheme(): string | null {\n return document.documentElement.getAttribute('data-theme')\n}\n\n// Set theme on document\nfunction setTheme(theme: string) {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nfunction ThemeControllerSwap({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n className = '',\n}: ThemeControllerSwapProps) {\n const [isDark, setIsDark] = useState(() => {\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with external theme changes\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <label className={`swap swap-rotate ${className}`}>\n <input\n type=\"checkbox\"\n checked={isDark}\n onChange={handleChange}\n />\n {/* sun icon */}\n <svg\n className=\"swap-off h-8 w-8 fill-current\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z\" />\n </svg>\n {/* moon icon */}\n <svg\n className=\"swap-on h-8 w-8 fill-current\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\" />\n </svg>\n </label>\n )\n}\n\nfunction ThemeControllerDropdown({\n themes,\n defaultTheme,\n onChange,\n className = '',\n}: ThemeControllerDropdownProps) {\n const radioName = useId()\n const [selectedTheme, setSelectedTheme] = useState(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) return current\n return defaultTheme || themes[0] || 'light'\n })\n\n // Sync with external theme changes\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) {\n setSelectedTheme(current)\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [themes])\n\n const handleChange = (theme: string) => {\n setSelectedTheme(theme)\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <div className={`dropdown dropdown-end ${className}`}>\n <div tabIndex={0} role=\"button\" className=\"btn\">\n Theme\n <svg\n width=\"12px\"\n height=\"12px\"\n className=\"inline-block h-2 w-2 fill-current opacity-60\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2048 2048\"\n >\n <path d=\"M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z\"></path>\n </svg>\n </div>\n <ul\n tabIndex={0}\n className=\"dropdown-content bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto\"\n >\n {themes.map((theme) => (\n <li key={theme}>\n <input\n type=\"radio\"\n name={radioName}\n className=\"btn btn-sm btn-block btn-ghost justify-start\"\n aria-label={theme}\n value={theme}\n checked={selectedTheme === theme}\n onChange={() => handleChange(theme)}\n />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: 'toggle-xs',\n sm: 'toggle-sm',\n md: 'toggle-md',\n lg: 'toggle-lg',\n}\n\nfunction ThemeControllerToggle({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n size = 'md',\n className = '',\n}: ThemeControllerToggleProps) {\n const [isDark, setIsDark] = useState(() => {\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with external theme changes\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`toggle ${sizeClasses[size]} ${className}`}\n checked={isDark}\n onChange={handleChange}\n aria-label=\"Toggle theme\"\n />\n )\n}\n\nexport const ThemeController = Object.assign(\n {},\n {\n Swap: ThemeControllerSwap,\n Dropdown: ThemeControllerDropdown,\n Toggle: ThemeControllerToggle,\n }\n)\n"],"names":["getCurrentTheme","setTheme","theme","ThemeControllerSwap","lightTheme","darkTheme","onChange","className","isDark","setIsDark","useState","useEffect","observer","current","handleChange","e","jsxs","jsx","ThemeControllerDropdown","themes","defaultTheme","radioName","useId","selectedTheme","setSelectedTheme","sizeClasses","ThemeControllerToggle","size","ThemeController"],"mappings":";;AAyBA,SAASA,IAAiC;AACxC,SAAO,SAAS,gBAAgB,aAAa,YAAY;AAC3D;AAGA,SAASC,EAASC,GAAe;AAC/B,WAAS,gBAAgB,aAAa,cAAcA,CAAK;AAC3D;AAEA,SAASC,EAAoB;AAAA,EAC3B,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAA6B;AAC3B,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,MACnBV,EAAA,MACGK,CACpB;AAGD,EAAAM,EAAU,MAAM;AACd,UAAMC,IAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAMC,IAAUb,EAAA;AAChB,MAAAS,EAAUI,MAAYR,CAAS;AAAA,IACjC,CAAC;AACD,WAAAO,EAAS,QAAQ,SAAS,iBAAiB,EAAE,YAAY,IAAM,iBAAiB,CAAC,YAAY,GAAG,GACzF,MAAMA,EAAS,WAAA;AAAA,EACxB,GAAG,CAACP,CAAS,CAAC;AAEd,QAAMS,IAAe,CAACC,MAA2C;AAE/D,UAAMb,IADUa,EAAE,OAAO,UACDV,IAAYD;AACpC,IAAAH,EAASC,CAAK,GACdI,IAAWJ,CAAK;AAAA,EAClB;AAEA,SACE,gBAAAc,EAAC,SAAA,EAAM,WAAW,oBAAoBT,CAAS,IAC7C,UAAA;AAAA,IAAA,gBAAAU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAST;AAAA,QACT,UAAUM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGZ,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,SAAQ;AAAA,QAER,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,koBAAA,CAAkoB;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5oB,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,SAAQ;AAAA,QAER,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,kSAAA,CAAkS;AAAA,MAAA;AAAA,IAAA;AAAA,EAC5S,GACF;AAEJ;AAEA,SAASC,EAAwB;AAAA,EAC/B,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAd;AAAA,EACA,WAAAC,IAAY;AACd,GAAiC;AAC/B,QAAMc,IAAYC,EAAA,GACZ,CAACC,GAAeC,CAAgB,IAAId,EAAS,MAAM;AACvD,UAAMG,IAAUb,EAAA;AAChB,WAAIa,KAAWM,EAAO,SAASN,CAAO,IAAUA,IACzCO,KAAgBD,EAAO,CAAC,KAAK;AAAA,EACtC,CAAC;AAGD,EAAAR,EAAU,MAAM;AACd,UAAMC,IAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAMC,IAAUb,EAAA;AAChB,MAAIa,KAAWM,EAAO,SAASN,CAAO,KACpCW,EAAiBX,CAAO;AAAA,IAE5B,CAAC;AACD,WAAAD,EAAS,QAAQ,SAAS,iBAAiB,EAAE,YAAY,IAAM,iBAAiB,CAAC,YAAY,GAAG,GACzF,MAAMA,EAAS,WAAA;AAAA,EACxB,GAAG,CAACO,CAAM,CAAC;AAEX,QAAML,IAAe,CAACZ,MAAkB;AACtC,IAAAsB,EAAiBtB,CAAK,GACtBD,EAASC,CAAK,GACdI,IAAWJ,CAAK;AAAA,EAClB;AAEA,SACE,gBAAAc,EAAC,OAAA,EAAI,WAAW,yBAAyBT,CAAS,IAChD,UAAA;AAAA,IAAA,gBAAAS,EAAC,SAAI,UAAU,GAAG,MAAK,UAAS,WAAU,OAAM,UAAA;AAAA,MAAA;AAAA,MAE9C,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,WAAU;AAAA,UACV,OAAM;AAAA,UACN,SAAQ;AAAA,UAER,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,6DAAA,CAA6D;AAAA,QAAA;AAAA,MAAA;AAAA,IACvE,GACF;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,WAAU;AAAA,QAET,UAAAE,EAAO,IAAI,CAACjB,wBACV,MAAA,EACC,UAAA,gBAAAe;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAMI;AAAA,YACN,WAAU;AAAA,YACV,cAAYnB;AAAA,YACZ,OAAOA;AAAA,YACP,SAASqB,MAAkBrB;AAAA,YAC3B,UAAU,MAAMY,EAAaZ,CAAK;AAAA,UAAA;AAAA,QAAA,EACpC,GATOA,CAUT,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;AAEA,MAAMuB,IAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAASC,EAAsB;AAAA,EAC7B,YAAAtB,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,MAAAqB,IAAO;AAAA,EACP,WAAApB,IAAY;AACd,GAA+B;AAC7B,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,MACnBV,EAAA,MACGK,CACpB;AAGD,EAAAM,EAAU,MAAM;AACd,UAAMC,IAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAMC,IAAUb,EAAA;AAChB,MAAAS,EAAUI,MAAYR,CAAS;AAAA,IACjC,CAAC;AACD,WAAAO,EAAS,QAAQ,SAAS,iBAAiB,EAAE,YAAY,IAAM,iBAAiB,CAAC,YAAY,GAAG,GACzF,MAAMA,EAAS,WAAA;AAAA,EACxB,GAAG,CAACP,CAAS,CAAC;AAEd,QAAMS,IAAe,CAAC,MAA2C;AAE/D,UAAMZ,IADU,EAAE,OAAO,UACDG,IAAYD;AACpC,IAAAH,EAASC,CAAK,GACdI,IAAWJ,CAAK;AAAA,EAClB;AAEA,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,UAAUQ,EAAYE,CAAI,CAAC,IAAIpB,CAAS;AAAA,MACnD,SAASC;AAAA,MACT,UAAUM;AAAA,MACV,cAAW;AAAA,IAAA;AAAA,EAAA;AAGjB;AAEO,MAAMc,IAAkB,OAAO;AAAA,EACpC,CAAA;AAAA,EACA;AAAA,IACE,MAAMzB;AAAA,IACN,UAAUe;AAAA,IACV,QAAQQ;AAAA,EAAA;AAEZ;"}
|
package/dist/index86.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index86.js","sources":["../src/components/TimePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef, useCallback, useId } from 'react'\nimport { Input } from './Input'\n\nexport interface TimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: '12' | '24'\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg'\n showSeconds?: boolean\n allowClear?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n hourStep?: number\n minuteStep?: number\n secondStep?: number\n status?: 'error' | 'warning'\n 'data-testid'?: string\n}\n\nfunction formatTime(date: Date | null, format: '12' | '24' = '24', showSeconds: boolean = false): string {\n if (!date) return ''\n\n let hours = date.getHours()\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n if (format === '12') {\n const period = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12 || 12\n const timeStr = showSeconds\n ? `${hours}:${minutes}:${seconds} ${period}`\n : `${hours}:${minutes} ${period}`\n return timeStr\n }\n\n const hoursStr = String(hours).padStart(2, '0')\n return showSeconds ? `${hoursStr}:${minutes}:${seconds}` : `${hoursStr}:${minutes}`\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(({\n value,\n defaultValue,\n onChange,\n format = '24',\n placeholder = 'Select time',\n disabled = false,\n className,\n size = 'md',\n showSeconds = false,\n allowClear = true,\n open: controlledOpen,\n onOpenChange,\n hourStep = 1,\n minuteStep = 1,\n secondStep = 1,\n status,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const [selectedTime, setSelectedTime] = useState<Date | null>(\n value !== undefined ? value : defaultValue || null\n )\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n const [hours, setHours] = useState(selectedTime ? selectedTime.getHours() : 0)\n const [minutes, setMinutes] = useState(selectedTime ? selectedTime.getMinutes() : 0)\n const [seconds, setSeconds] = useState(selectedTime ? selectedTime.getSeconds() : 0)\n const [period, setPeriod] = useState<'AM' | 'PM'>(\n selectedTime && selectedTime.getHours() >= 12 ? 'PM' : 'AM'\n )\n const [focusedColumn, setFocusedColumn] = useState<'hour' | 'minute' | 'second' | 'period'>('hour')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const uniqueId = useId()\n const baseTestId = testId || 'timepicker'\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedTime(value)\n if (value) {\n setHours(value.getHours())\n setMinutes(value.getMinutes())\n setSeconds(value.getSeconds())\n setPeriod(value.getHours() >= 12 ? 'PM' : 'AM')\n }\n }\n }, [value])\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [controlledOpen, onOpenChange])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setOpen])\n\n // Focus trap and keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false)\n return\n }\n\n if (e.key === 'Tab') {\n // Allow tab to cycle through columns\n return\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n const delta = e.key === 'ArrowUp' ? -1 : 1\n\n if (focusedColumn === 'hour') {\n const maxHour = format === '12' ? 12 : 23\n const minHour = format === '12' ? 1 : 0\n let newHour = hours + (delta * hourStep)\n if (newHour > maxHour) newHour = minHour\n if (newHour < minHour) newHour = maxHour\n handleHourChange(newHour)\n } else if (focusedColumn === 'minute') {\n let newMinute = minutes + (delta * minuteStep)\n if (newMinute > 59) newMinute = 0\n if (newMinute < 0) newMinute = 59\n handleMinuteChange(newMinute)\n } else if (focusedColumn === 'second') {\n let newSecond = seconds + (delta * secondStep)\n if (newSecond > 59) newSecond = 0\n if (newSecond < 0) newSecond = 59\n handleSecondChange(newSecond)\n } else if (focusedColumn === 'period') {\n handlePeriodChange(period === 'AM' ? 'PM' : 'AM')\n }\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const columns: Array<'hour' | 'minute' | 'second' | 'period'> = ['hour', 'minute']\n if (showSeconds) columns.push('second')\n if (format === '12') columns.push('period')\n\n const currentIndex = columns.indexOf(focusedColumn)\n const delta = e.key === 'ArrowLeft' ? -1 : 1\n let newIndex = currentIndex + delta\n if (newIndex < 0) newIndex = columns.length - 1\n if (newIndex >= columns.length) newIndex = 0\n setFocusedColumn(columns[newIndex])\n }\n\n if (e.key === 'Enter') {\n setOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, focusedColumn, hours, minutes, seconds, period, format, showSeconds, hourStep, minuteStep, secondStep, setOpen])\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n setSelectedTime(null)\n setHours(0)\n setMinutes(0)\n setSeconds(0)\n setPeriod('AM')\n onChange?.(null)\n }, [onChange])\n\n const handleTimeChange = (newHours: number, newMinutes: number, newSeconds: number) => {\n const now = new Date()\n const newTime = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n newHours,\n newMinutes,\n newSeconds\n )\n setSelectedTime(newTime)\n onChange?.(newTime)\n }\n\n const handleHourChange = (newHour: number) => {\n let actualHour = newHour\n if (format === '12') {\n actualHour = period === 'PM' ? (newHour % 12) + 12 : newHour % 12\n }\n setHours(actualHour)\n handleTimeChange(actualHour, minutes, seconds)\n }\n\n const handleMinuteChange = (newMinute: number) => {\n setMinutes(newMinute)\n handleTimeChange(hours, newMinute, seconds)\n }\n\n const handleSecondChange = (newSecond: number) => {\n setSeconds(newSecond)\n handleTimeChange(hours, minutes, newSecond)\n }\n\n const handlePeriodChange = (newPeriod: 'AM' | 'PM') => {\n setPeriod(newPeriod)\n const newHours = newPeriod === 'PM'\n ? (hours % 12) + 12\n : hours % 12\n setHours(newHours)\n handleTimeChange(newHours, minutes, seconds)\n }\n\n const renderTimeColumn = (\n columnType: 'hour' | 'minute' | 'second',\n label: string,\n maxValue: number,\n currentValue: number,\n onChangeValue: (value: number) => void,\n step: number = 1,\n start: number = 0\n ) => {\n const items: number[] = []\n for (let i = start; i <= maxValue; i += step) {\n items.push(i)\n }\n const listboxId = `${uniqueId}-${columnType}-listbox`\n const isFocused = focusedColumn === columnType\n\n return (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label={`Select ${label.toLowerCase()}`}\n id={listboxId}\n data-testid={`${baseTestId}-${columnType}-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn(columnType)}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n {label}\n </div>\n <div className=\"overflow-y-auto max-h-48\">\n {items.map((item) => {\n const isSelected = currentValue === item\n return (\n <button\n key={item}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onChangeValue(item)}\n data-testid={`${baseTestId}-${columnType}-${item}`}\n className={[\n 'w-full px-4 py-2 text-center hover:bg-base-200 transition-colors',\n isSelected ? 'bg-primary text-primary-content' : '',\n isFocused && isSelected ? 'ring-2 ring-primary ring-offset-1' : ''\n ].filter(Boolean).join(' ')}\n >\n {String(item).padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayHours = format === '12' ? (hours % 12 || 12) : hours\n\n const statusClasses = {\n error: 'input-error',\n warning: 'input-warning',\n }\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={['relative', className].filter(Boolean).join(' ')}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n <div className=\"relative\">\n <Input\n value={formatTime(selectedTime, format, showSeconds)}\n placeholder={placeholder}\n disabled={disabled}\n size={size}\n readOnly\n onClick={() => !disabled && setOpen(!isOpen)}\n className={['cursor-pointer pr-8', status ? statusClasses[status] : ''].filter(Boolean).join(' ')}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? `${uniqueId}-dropdown` : undefined}\n data-testid={`${baseTestId}-input`}\n />\n {allowClear && selectedTime && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 btn btn-ghost btn-xs btn-circle\"\n aria-label=\"Clear time\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n id={`${uniqueId}-dropdown`}\n className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-xl z-[9999] w-fit\"\n role=\"dialog\"\n aria-label=\"Time picker\"\n data-testid={`${baseTestId}-dropdown`}\n >\n <div className=\"flex divide-x divide-base-300\">\n {renderTimeColumn(\n 'hour',\n 'Hour',\n format === '12' ? 12 : 23,\n displayHours,\n handleHourChange,\n hourStep,\n format === '12' ? 1 : 0\n )}\n\n {renderTimeColumn('minute', 'Min', 59, minutes, handleMinuteChange, minuteStep)}\n\n {showSeconds && renderTimeColumn('second', 'Sec', 59, seconds, handleSecondChange, secondStep)}\n\n {format === '12' && (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label=\"Select period\"\n data-testid={`${baseTestId}-period-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn('period')}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n Period\n </div>\n <div className=\"flex flex-col p-2 gap-2\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'AM'}\n onClick={() => handlePeriodChange('AM')}\n data-testid={`${baseTestId}-period-am`}\n className={[\n 'btn btn-sm',\n period === 'AM' ? 'btn-primary' : 'btn-ghost'\n ].join(' ')}\n >\n AM\n </button>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'PM'}\n onClick={() => handlePeriodChange('PM')}\n data-testid={`${baseTestId}-period-pm`}\n className={[\n 'btn btn-sm',\n period === 'PM' ? 'btn-primary' : 'btn-ghost'\n ].join(' ')}\n >\n PM\n </button>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end gap-2 p-3 border-t border-base-300\">\n <button\n type=\"button\"\n onClick={() => {\n const now = new Date()\n setHours(now.getHours())\n setMinutes(now.getMinutes())\n setSeconds(now.getSeconds())\n setPeriod(now.getHours() >= 12 ? 'PM' : 'AM')\n handleTimeChange(now.getHours(), now.getMinutes(), now.getSeconds())\n }}\n className=\"btn btn-ghost btn-sm\"\n data-testid={`${baseTestId}-now`}\n >\n Now\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"btn btn-primary btn-sm\"\n data-testid={`${baseTestId}-ok`}\n >\n OK\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nTimePicker.displayName = 'TimePicker'\n"],"names":["formatTime","date","format","showSeconds","hours","minutes","seconds","period","hoursStr","TimePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","className","size","allowClear","controlledOpen","onOpenChange","hourStep","minuteStep","secondStep","status","testId","rest","ref","selectedTime","setSelectedTime","useState","internalOpen","setInternalOpen","isOpen","setHours","setMinutes","setSeconds","setPeriod","focusedColumn","setFocusedColumn","containerRef","useRef","dropdownRef","uniqueId","useId","baseTestId","useEffect","setOpen","useCallback","newOpen","handleClickOutside","event","handleKeyDown","e","delta","maxHour","minHour","newHour","handleHourChange","newMinute","handleMinuteChange","newSecond","handleSecondChange","handlePeriodChange","columns","currentIndex","newIndex","handleClear","handleTimeChange","newHours","newMinutes","newSeconds","now","newTime","actualHour","newPeriod","renderTimeColumn","columnType","label","maxValue","currentValue","onChangeValue","step","start","items","i","listboxId","isFocused","jsxs","jsx","item","isSelected","displayHours","statusClasses","node","Input"],"mappings":"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"}
|
package/dist/index87.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index87.js","sources":["../src/components/Timeline.tsx"],"sourcesContent":["import React, { forwardRef, useMemo } from 'react'\nimport { Loading } from './Loading'\n\nexport type TimelineMode = 'start' | 'alternate' | 'end'\nexport type TimelineColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: React.Key\n /** Content at start position (left/top) */\n start?: React.ReactNode\n /** Content at end position (right/bottom) */\n end?: React.ReactNode\n /** Central icon or marker */\n icon?: React.ReactNode\n /** Wrap start content in timeline-box */\n startBox?: boolean\n /** Wrap end content in timeline-box */\n endBox?: boolean\n /** Color of the timeline dot/connector */\n color?: TimelineColor\n /** Show loading spinner instead of icon */\n loading?: boolean\n /** Additional CSS classes for this item */\n className?: string\n}\n\nexport interface TimelineProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {\n /** Timeline items (compound pattern) */\n children?: React.ReactNode\n /** Timeline items (declarative API) */\n items?: TimelineItemConfig[]\n /** Vertical layout orientation */\n vertical?: boolean\n /** Horizontal layout (default) */\n horizontal?: boolean\n /** All items on one side */\n compact?: boolean\n /** Snap icon to start instead of center */\n snapIcon?: boolean\n /** Item distribution layout */\n mode?: TimelineMode\n /** Reverse item order */\n reverse?: boolean\n /** Show pending/loading indicator at end */\n pending?: React.ReactNode\n /** Custom icon for pending item */\n pendingIcon?: React.ReactNode\n /** Test ID for the component */\n 'data-testid'?: string\n /** Accessible label for the timeline */\n 'aria-label'?: string\n}\n\n// Public props for Timeline.Item (excludes internal props)\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'color'> {\n /** Content at start position (left/top) */\n start?: React.ReactNode\n /** Content at end position (right/bottom) */\n end?: React.ReactNode\n /** Central icon or marker */\n icon?: React.ReactNode\n /** Wrap start content in timeline-box */\n startBox?: boolean\n /** Wrap end content in timeline-box */\n endBox?: boolean\n /** Color of the timeline dot/connector */\n color?: TimelineColor\n /** Show loading spinner instead of icon */\n loading?: boolean\n /** Test ID for this item */\n 'data-testid'?: string\n}\n\n// Internal props injected by Timeline container\ninterface TimelineItemInternalProps extends TimelineItemProps {\n _index?: number\n _total?: number\n _compact?: boolean\n _vertical?: boolean\n _mode?: TimelineMode\n _baseTestId?: string\n}\n\nconst colorClasses: Record<TimelineColor, string> = {\n primary: 'text-primary',\n secondary: 'text-secondary',\n accent: 'text-accent',\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n neutral: 'text-neutral',\n}\n\nconst hrColorClasses: Record<TimelineColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n neutral: 'bg-neutral',\n}\n\nconst TimelineItem = forwardRef<HTMLLIElement, TimelineItemInternalProps>(\n (\n {\n start,\n end,\n icon,\n startBox = false,\n endBox = false,\n color,\n loading = false,\n className = '',\n 'data-testid': testId,\n _index = 0,\n _total = 1,\n _compact = false,\n _vertical = false,\n _mode = 'alternate',\n _baseTestId,\n ...rest\n },\n ref\n ) => {\n const itemTestId = testId ?? (_baseTestId ? `${_baseTestId}-item-${_index}` : undefined)\n\n const startClasses = ['timeline-start', startBox && 'timeline-box'].filter(Boolean).join(' ')\n const endClasses = ['timeline-end', endBox && 'timeline-box'].filter(Boolean).join(' ')\n const middleClasses = ['timeline-middle', color && colorClasses[color]].filter(Boolean).join(' ')\n const hrClasses = color ? hrColorClasses[color] : undefined\n\n const isFirst = _index === 0\n const isLast = _index === _total - 1\n\n // Determine content placement based on mode\n const isEven = _index % 2 === 0\n const showOnStart = _mode === 'start' || (_mode === 'alternate' && !isEven)\n const showOnEnd = _mode === 'end' || (_mode === 'alternate' && isEven)\n\n // Render the icon or loading spinner\n const iconContent = loading ? (\n <Loading size=\"xs\" />\n ) : (\n icon\n )\n\n // Render connectors and content based on layout\n if (_compact) {\n // Compact layout: connector, icon, end content, connector\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {end && <div className={endClasses}>{end}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else if (_vertical) {\n // Vertical layout with mode support\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {showOnStart && start && <div className={startClasses}>{start}</div>}\n {showOnEnd && !showOnStart && end && <div className={startClasses}>{end}</div>}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {showOnEnd && start && !showOnStart && <div className={endClasses}>{start}</div>}\n {(showOnStart || (!showOnStart && !showOnEnd)) && end && <div className={endClasses}>{end}</div>}\n {!showOnStart && showOnEnd && start && <div className={endClasses}>{start}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else {\n // Horizontal alternating layout\n if (showOnEnd) {\n // Content on end side\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {start && <div className={startClasses}>{start}</div>}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {end && <div className={endClasses}>{end}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else {\n // Content on start side\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {start && <div className={startClasses}>{start}</div>}\n {end && <div className={endClasses}>{end}</div>}\n </li>\n )\n }\n }\n }\n)\n\nTimelineItem.displayName = 'Timeline.Item'\n\nconst TimelineRoot = forwardRef<HTMLUListElement, TimelineProps>(\n (\n {\n children,\n items,\n className = '',\n vertical = false,\n horizontal = false,\n compact = false,\n snapIcon = false,\n mode = 'alternate',\n reverse = false,\n pending,\n pendingIcon,\n 'data-testid': testId = 'timeline',\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const classes = [\n 'timeline',\n vertical && 'timeline-vertical',\n horizontal && 'timeline-horizontal',\n compact && 'timeline-compact',\n snapIcon && 'timeline-snap-icon',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Build items from declarative API if provided\n const declarativeItems = useMemo(() => {\n if (!items) return null\n return items.map((item, index) => (\n <TimelineItem\n key={item.key ?? index}\n start={item.start}\n end={item.end}\n icon={item.icon}\n startBox={item.startBox}\n endBox={item.endBox}\n color={item.color}\n loading={item.loading}\n className={item.className}\n />\n ))\n }, [items])\n\n // Get children to render (either declarative or compound)\n const childrenToRender = declarativeItems ?? children\n\n // Convert to array and optionally reverse\n let childArray = React.Children.toArray(childrenToRender)\n if (reverse) {\n childArray = [...childArray].reverse()\n }\n\n // Add pending item if provided\n if (pending) {\n const pendingItem = (\n <TimelineItem\n key=\"__pending__\"\n end={pending}\n endBox\n icon={pendingIcon}\n loading={!pendingIcon}\n />\n )\n childArray.push(pendingItem)\n }\n\n const total = childArray.length\n\n // Inject internal props into each Timeline.Item\n const childrenWithProps = childArray.map((child, index) => {\n if (React.isValidElement<TimelineItemInternalProps>(child)) {\n return React.cloneElement(child, {\n _index: index,\n _total: total,\n _compact: compact,\n _vertical: vertical,\n _mode: mode,\n _baseTestId: testId,\n })\n }\n return child\n })\n\n return (\n <ul\n ref={ref}\n className={classes}\n data-testid={testId}\n aria-label={ariaLabel}\n role=\"list\"\n {...rest}\n >\n {childrenWithProps}\n </ul>\n )\n }\n)\n\nTimelineRoot.displayName = 'Timeline'\n\nexport const Timeline = Object.assign(TimelineRoot, {\n Item: TimelineItem,\n})\n"],"names":["colorClasses","hrColorClasses","TimelineItem","forwardRef","start","end","icon","startBox","endBox","color","loading","className","testId","_index","_total","_compact","_vertical","_mode","_baseTestId","rest","ref","itemTestId","startClasses","endClasses","middleClasses","hrClasses","isFirst","isLast","isEven","showOnStart","showOnEnd","iconContent","jsx","Loading","TimelineRoot","children","items","vertical","horizontal","compact","snapIcon","mode","reverse","pending","pendingIcon","ariaLabel","classes","childrenToRender","useMemo","item","index","childArray","React","pendingItem","total","childrenWithProps","child","Timeline"],"mappings":"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"}
|
package/dist/index88.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index88.js","sources":["../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n xs: 'toggle-xs',\n sm: 'toggle-sm',\n md: 'toggle-md',\n lg: 'toggle-lg',\n xl: 'toggle-xl',\n }\n\n const colorClasses = {\n primary: 'toggle-primary',\n secondary: 'toggle-secondary',\n accent: 'toggle-accent',\n neutral: 'toggle-neutral',\n success: 'toggle-success',\n warning: 'toggle-warning',\n info: 'toggle-info',\n error: 'toggle-error',\n }\n\n const toggleClasses = [\n 'toggle',\n size && sizeClasses[size],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["Toggle","forwardRef","size","color","className","props","ref","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;AAQO,MAAMA,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAGAC,IAAe;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IAAA,GAGHC,IAAgB;AAAA,MACpB;AAAA,MACAP,KAAQK,EAAYL,CAAI;AAAA,MACxBC,KAASK,EAAaL,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELM,IAAYL,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAM,EAAC,SAAA,EAAM,KAAAL,GAAU,MAAK,YAAW,WAAWG,GAAe,cAAYC,GAAY,GAAGL,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
|
package/dist/index9.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index9.js","sources":["../src/components/Button.tsx"],"sourcesContent":["import React from 'react'\n\ntype BaseButtonProps = {\n /** Button color */\n color?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'\n /** Button style variant */\n variant?: 'solid' | 'outline' | 'dash' | 'soft' | 'ghost' | 'link'\n /** Button size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Active/pressed visual state */\n active?: boolean\n /** Show loading spinner and disable button */\n loading?: boolean\n /** Button shape */\n shape?: 'square' | 'circle' | 'wide' | 'block' | 'round'\n /** Disable click animation */\n noAnimation?: boolean\n /** Icon element to display */\n icon?: React.ReactNode\n /** Position of the icon */\n iconPosition?: 'start' | 'end'\n /** Applies error/danger styling (shorthand for color=\"error\") */\n danger?: boolean\n /** Toggle button pressed state (sets aria-pressed) */\n pressed?: boolean\n}\n\ntype ButtonAsButton = BaseButtonProps &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> & {\n href?: undefined\n htmlType?: 'button' | 'submit' | 'reset'\n }\n\ntype ButtonAsAnchor = BaseButtonProps &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'type'> & {\n href: string\n htmlType?: undefined\n /** Disable the link button */\n disabled?: boolean\n }\n\nexport type ButtonProps = ButtonAsButton | ButtonAsAnchor\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n color,\n variant,\n size = 'md',\n active = false,\n loading = false,\n shape,\n noAnimation = false,\n icon,\n iconPosition = 'start',\n danger = false,\n pressed,\n className = '',\n ...props\n}) => {\n // danger prop is a shorthand for color=\"error\"\n const effectiveColor = danger ? 'error' : color\n\n const colorClasses = {\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n accent: 'btn-accent',\n info: 'btn-info',\n success: 'btn-success',\n warning: 'btn-warning',\n error: 'btn-error',\n neutral: 'btn-neutral',\n }\n\n const variantClasses = {\n solid: '', // default, no extra class needed\n outline: 'btn-outline',\n dash: 'btn-dash',\n soft: 'btn-soft',\n ghost: 'btn-ghost',\n link: 'btn-link',\n }\n\n const sizeClasses = {\n xs: 'btn-xs',\n sm: 'btn-sm',\n md: '',\n lg: 'btn-lg',\n xl: 'btn-xl',\n }\n\n const shapeClasses = {\n square: 'btn-square',\n circle: 'btn-circle',\n wide: 'btn-wide',\n block: 'btn-block',\n round: 'rounded-full',\n }\n\n const classes = [\n 'btn',\n effectiveColor && colorClasses[effectiveColor],\n variant && variantClasses[variant],\n sizeClasses[size],\n active && 'btn-active',\n shape && shapeClasses[shape],\n noAnimation && 'no-animation',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine icon spacing based on whether there's text content\n const hasChildren = children !== undefined && children !== null && children !== ''\n const iconSpacing = hasChildren ? (iconPosition === 'start' ? 'mr-2' : 'ml-2') : ''\n\n const iconElement = icon && (\n <span className={`inline-flex items-center ${iconSpacing}`} aria-hidden=\"true\">\n {icon}\n </span>\n )\n\n const content = (\n <>\n {loading && <span className=\"loading loading-spinner\" aria-hidden=\"true\"></span>}\n {!loading && icon && iconPosition === 'start' && iconElement}\n {children}\n {!loading && icon && iconPosition === 'end' && iconElement}\n </>\n )\n\n if ('href' in props && props.href !== undefined) {\n const { href, disabled, onKeyDown, onClick, ...anchorProps } = props as ButtonAsAnchor & {\n onKeyDown?: React.KeyboardEventHandler<HTMLAnchorElement>\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n }\n const isDisabled = disabled || loading\n\n // Handle Space key for anchor buttons (links only respond to Enter natively)\n const handleKeyDown = (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (event.key === ' ' && !isDisabled) {\n event.preventDefault()\n event.currentTarget.click()\n }\n onKeyDown?.(event)\n }\n\n // Prevent click when disabled\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault()\n return\n }\n onClick?.(event)\n }\n\n return (\n <a\n href={isDisabled ? undefined : href}\n role=\"button\"\n className={classes}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n {...anchorProps}\n >\n {content}\n </a>\n )\n }\n\n const { htmlType, ...buttonProps } = props as Omit<ButtonAsButton, keyof BaseButtonProps>\n const buttonType: 'button' | 'submit' | 'reset' = htmlType ?? 'button'\n return (\n <button\n type={buttonType}\n className={classes}\n aria-busy={loading || undefined}\n aria-pressed={pressed}\n disabled={loading || buttonProps.disabled}\n {...buttonProps}\n >\n {content}\n </button>\n )\n}\n"],"names":["Button","children","color","variant","size","active","loading","shape","noAnimation","icon","iconPosition","danger","pressed","className","props","effectiveColor","colorClasses","variantClasses","sizeClasses","shapeClasses","classes","iconSpacing","iconElement","jsx","content","jsxs","Fragment","href","disabled","onKeyDown","onClick","anchorProps","isDisabled","event","htmlType","buttonProps"],"mappings":"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"}
|
package/dist/index90.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index90.js","sources":["../src/components/Tooltip.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n tip: string\n position?: 'top' | 'bottom' | 'left' | 'right'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n open?: boolean\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n children,\n tip,\n className = '',\n position = 'top',\n color,\n open = false,\n ...rest\n}) => {\n const positionClasses = {\n top: 'tooltip-top',\n bottom: 'tooltip-bottom',\n left: 'tooltip-left',\n right: 'tooltip-right',\n }\n\n const colorClasses = color\n ? {\n neutral: 'tooltip-neutral',\n primary: 'tooltip-primary',\n secondary: 'tooltip-secondary',\n accent: 'tooltip-accent',\n info: 'tooltip-info',\n success: 'tooltip-success',\n warning: 'tooltip-warning',\n error: 'tooltip-error',\n }[color]\n : undefined\n\n const classes = [\n 'tooltip',\n positionClasses[position],\n colorClasses,\n open && 'tooltip-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} data-tip={tip} data-state={open ? 'open' : 'closed'} {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["Tooltip","children","tip","className","position","color","open","rest","positionClasses","colorClasses","classes","jsx"],"mappings":";AAUO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAkB;AAAA,IACtB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GAGHC,IAAeJ,IACjB;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA,EACPA,CAAK,IACP,QAEEK,IAAU;AAAA,IACd;AAAA,IACAF,EAAgBJ,CAAQ;AAAA,IACxBK;AAAA,IACAH,KAAQ;AAAA,IACRH;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,OAAA,EAAI,WAAWD,GAAS,YAAUR,GAAK,cAAYI,IAAO,SAAS,UAAW,GAAGC,GAC/E,UAAAN,EAAA,CACH;AAEJ;"}
|
package/dist/index91.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index91.js","sources":["../src/components/Transfer.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo } from 'react'\n\nexport interface TransferItem {\n key: string\n title: React.ReactNode\n description?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface TransferProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n dataSource: TransferItem[]\n targetKeys?: string[]\n defaultTargetKeys?: string[]\n onChange?: (targetKeys: string[], direction: 'left' | 'right', moveKeys: string[]) => void\n onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void\n titles?: [React.ReactNode, React.ReactNode]\n render?: (item: TransferItem) => React.ReactNode\n showSearch?: boolean\n filterOption?: (inputValue: string, item: TransferItem) => boolean\n showSelectAll?: boolean\n disabled?: boolean\n listStyle?: React.CSSProperties\n}\n\ninterface TransferListProps {\n items: TransferItem[]\n selectedKeys: string[]\n onSelectChange: (keys: string[]) => void\n title: React.ReactNode\n showSearch: boolean\n filterOption: (inputValue: string, item: TransferItem) => boolean\n render: (item: TransferItem) => React.ReactNode\n showSelectAll: boolean\n disabled: boolean\n listStyle?: React.CSSProperties\n direction: 'left' | 'right'\n}\n\nfunction TransferList({\n items,\n selectedKeys,\n onSelectChange,\n title,\n showSearch,\n filterOption,\n render,\n showSelectAll,\n disabled,\n listStyle,\n}: TransferListProps) {\n const [searchValue, setSearchValue] = useState('')\n\n const filteredItems = useMemo(() => {\n if (!searchValue) return items\n return items.filter((item) => filterOption(searchValue, item))\n }, [items, searchValue, filterOption])\n\n const enabledItems = filteredItems.filter((item) => !item.disabled)\n const allSelected = enabledItems.length > 0 && enabledItems.every((item) => selectedKeys.includes(item.key))\n const someSelected = enabledItems.some((item) => selectedKeys.includes(item.key))\n\n const handleSelectAll = () => {\n if (disabled) return\n\n if (allSelected) {\n // Deselect all enabled items\n onSelectChange(selectedKeys.filter((key) => !enabledItems.some((item) => item.key === key)))\n } else {\n // Select all enabled items\n const enabledKeys = enabledItems.map((item) => item.key)\n const newKeys = [...new Set([...selectedKeys, ...enabledKeys])]\n onSelectChange(newKeys)\n }\n }\n\n const handleSelectItem = (key: string, itemDisabled: boolean) => {\n if (disabled || itemDisabled) return\n\n if (selectedKeys.includes(key)) {\n onSelectChange(selectedKeys.filter((k) => k !== key))\n } else {\n onSelectChange([...selectedKeys, key])\n }\n }\n\n return (\n <div\n className=\"flex flex-col border border-base-300 rounded-lg bg-base-100 overflow-hidden\"\n style={{ width: 200, height: 300, ...listStyle }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-base-300 bg-base-200\">\n {showSelectAll && (\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected && !allSelected\n }}\n onChange={handleSelectAll}\n disabled={disabled || enabledItems.length === 0}\n />\n )}\n <span className=\"flex-1 font-medium text-sm truncate\">{title}</span>\n <span className=\"text-xs text-base-content/50\">\n {selectedKeys.filter((k) => filteredItems.some((item) => item.key === k)).length}/\n {filteredItems.length}\n </span>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div className=\"px-2 py-2 border-b border-base-300\">\n <input\n type=\"text\"\n className=\"input input-sm w-full\"\n placeholder=\"Search...\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n disabled={disabled}\n />\n </div>\n )}\n\n {/* List */}\n <div className=\"flex-1 overflow-auto\">\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <div\n key={item.key}\n className={[\n 'flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-base-200 transition-colors',\n selectedKeys.includes(item.key) && 'bg-primary/10',\n (disabled || item.disabled) && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => handleSelectItem(item.key, !!item.disabled)}\n >\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={selectedKeys.includes(item.key)}\n disabled={disabled || item.disabled}\n onChange={() => {}}\n />\n <span className=\"flex-1 truncate text-sm\">{render(item)}</span>\n </div>\n ))\n ) : (\n <div className=\"flex items-center justify-center h-full text-base-content/50 text-sm\">\n No data\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport function Transfer({\n dataSource,\n targetKeys: controlledTargetKeys,\n defaultTargetKeys = [],\n onChange,\n onSelectChange,\n titles = ['Source', 'Target'],\n render = (item) => item.title,\n showSearch = false,\n filterOption = (inputValue, item) => {\n const title = typeof item.title === 'string' ? item.title : String(item.title)\n return title.toLowerCase().includes(inputValue.toLowerCase())\n },\n showSelectAll = true,\n disabled = false,\n listStyle,\n className = '',\n ...rest\n}: TransferProps) {\n const [internalTargetKeys, setInternalTargetKeys] = useState<string[]>(defaultTargetKeys)\n const [sourceSelectedKeys, setSourceSelectedKeys] = useState<string[]>([])\n const [targetSelectedKeys, setTargetSelectedKeys] = useState<string[]>([])\n\n const targetKeys = controlledTargetKeys ?? internalTargetKeys\n\n // Split items into source and target\n const sourceItems = useMemo(\n () => dataSource.filter((item) => !targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const targetItems = useMemo(\n () => dataSource.filter((item) => targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const handleSourceSelectChange = useCallback(\n (keys: string[]) => {\n setSourceSelectedKeys(keys)\n onSelectChange?.(keys, targetSelectedKeys)\n },\n [targetSelectedKeys, onSelectChange]\n )\n\n const handleTargetSelectChange = useCallback(\n (keys: string[]) => {\n setTargetSelectedKeys(keys)\n onSelectChange?.(sourceSelectedKeys, keys)\n },\n [sourceSelectedKeys, onSelectChange]\n )\n\n const moveToTarget = useCallback(() => {\n if (disabled || sourceSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = sourceSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = [...targetKeys, ...movableKeys]\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setSourceSelectedKeys([])\n onChange?.(newTargetKeys, 'right', movableKeys)\n }, [disabled, sourceSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const moveToSource = useCallback(() => {\n if (disabled || targetSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = targetSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = targetKeys.filter((key) => !movableKeys.includes(key))\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setTargetSelectedKeys([])\n onChange?.(newTargetKeys, 'left', movableKeys)\n }, [disabled, targetSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const canMoveToTarget = sourceSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n const canMoveToSource = targetSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n return (\n <div className={`flex items-center gap-4 ${className}`} {...rest}>\n {/* Source list */}\n <TransferList\n items={sourceItems}\n selectedKeys={sourceSelectedKeys}\n onSelectChange={handleSourceSelectChange}\n title={titles[0]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"left\"\n />\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2\">\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToTarget}\n disabled={disabled || !canMoveToTarget}\n aria-label=\"Move to target\"\n >\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 </button>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToSource}\n disabled={disabled || !canMoveToSource}\n aria-label=\"Move to source\"\n >\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=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* Target list */}\n <TransferList\n items={targetItems}\n selectedKeys={targetSelectedKeys}\n onSelectChange={handleTargetSelectChange}\n title={titles[1]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"right\"\n />\n </div>\n )\n}\n"],"names":["TransferList","items","selectedKeys","onSelectChange","title","showSearch","filterOption","render","showSelectAll","disabled","listStyle","searchValue","setSearchValue","useState","filteredItems","useMemo","item","enabledItems","allSelected","someSelected","handleSelectAll","key","enabledKeys","newKeys","handleSelectItem","itemDisabled","k","jsxs","jsx","el","Transfer","dataSource","controlledTargetKeys","defaultTargetKeys","onChange","titles","inputValue","className","rest","internalTargetKeys","setInternalTargetKeys","sourceSelectedKeys","setSourceSelectedKeys","targetSelectedKeys","setTargetSelectedKeys","targetKeys","sourceItems","targetItems","handleSourceSelectChange","useCallback","keys","handleTargetSelectChange","moveToTarget","movableKeys","i","newTargetKeys","moveToSource","canMoveToTarget","canMoveToSource"],"mappings":"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"}
|
package/dist/index93.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index93.js","sources":["../src/components/TreeSelect.tsx"],"sourcesContent":["import React, {\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n forwardRef,\n useId,\n} from 'react'\nimport type { TreeDataNode } from './Tree'\n\nexport type TreeSelectSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TreeSelectColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'neutral'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\nexport type TreeSelectStatus = 'error' | 'warning'\nexport type TreeSelectVariant = 'outlined' | 'filled' | 'borderless'\nexport type ShowCheckedStrategy = 'SHOW_ALL' | 'SHOW_PARENT' | 'SHOW_CHILD'\n\n// Static strategy constants\nconst SHOW_ALL: ShowCheckedStrategy = 'SHOW_ALL'\nconst SHOW_PARENT: ShowCheckedStrategy = 'SHOW_PARENT'\nconst SHOW_CHILD: ShowCheckedStrategy = 'SHOW_CHILD'\n\nexport interface TreeSelectFieldNames {\n label?: string\n value?: string\n children?: string\n}\n\n/** Value type when labelInValue is true */\nexport interface LabeledValue {\n value: string\n label: React.ReactNode\n}\n\nexport interface TreeSelectProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n treeData: TreeDataNode[]\n value?: string | string[] | LabeledValue | LabeledValue[]\n defaultValue?: string | string[] | LabeledValue | LabeledValue[]\n onChange?: (\n value: string | string[] | LabeledValue | LabeledValue[],\n labels: React.ReactNode[],\n extra?: { triggerValue: string; triggerNode: TreeDataNode }\n ) => void\n multiple?: boolean\n treeCheckable?: boolean\n treeCheckStrictly?: boolean\n showCheckedStrategy?: ShowCheckedStrategy\n showSearch?: boolean\n searchValue?: string\n onSearch?: (value: string) => void\n filterTreeNode?: (searchValue: string, node: TreeDataNode) => boolean\n placeholder?: string\n allowClear?: boolean\n disabled?: boolean\n treeDefaultExpandAll?: boolean\n treeDefaultExpandedKeys?: string[]\n treeExpandedKeys?: string[]\n onTreeExpand?: (expandedKeys: string[]) => void\n size?: TreeSelectSize\n color?: TreeSelectColor\n status?: TreeSelectStatus\n /** Visual variant style */\n variant?: TreeSelectVariant\n /** Ghost style with no background */\n ghost?: boolean\n /** Maximum number of tags to show (multiple/treeCheckable mode) */\n maxTagCount?: number | 'responsive'\n maxTagPlaceholder?: React.ReactNode | ((omittedValues: string[]) => React.ReactNode)\n /** Maximum number of selections allowed */\n maxCount?: number\n /** Return object with value and label instead of just value */\n labelInValue?: boolean\n /** Custom tag render function */\n tagRender?: (props: {\n label: React.ReactNode\n value: string\n closable: boolean\n onClose: () => void\n }) => React.ReactNode\n treeLine?: boolean\n /** Show tree node icon */\n treeIcon?: boolean\n loadData?: (node: TreeDataNode) => Promise<void>\n fieldNames?: TreeSelectFieldNames\n open?: boolean\n onDropdownVisibleChange?: (open: boolean) => void\n suffixIcon?: React.ReactNode\n switcherIcon?: React.ReactNode | ((props: { expanded: boolean }) => React.ReactNode)\n notFoundContent?: React.ReactNode\n dropdownRender?: (menu: React.ReactNode) => React.ReactNode\n popupClassName?: string\n 'data-testid'?: string\n}\n\n// Helper to get field value based on fieldNames\nfunction getFieldValue(\n node: TreeDataNode,\n field: 'title' | 'key' | 'children',\n fieldNames?: TreeSelectFieldNames\n): unknown {\n if (field === 'title') {\n const labelField = fieldNames?.label || 'title'\n return (node as unknown as Record<string, unknown>)[labelField]\n }\n if (field === 'key') {\n const valueField = fieldNames?.value || 'key'\n return (node as unknown as Record<string, unknown>)[valueField]\n }\n if (field === 'children') {\n const childrenField = fieldNames?.children || 'children'\n return (node as unknown as Record<string, unknown>)[childrenField]\n }\n return undefined\n}\n\n// Helper to flatten tree data for search\nfunction flattenTree(\n data: TreeDataNode[],\n parentPath: React.ReactNode[] = [],\n fieldNames?: TreeSelectFieldNames\n): Array<{ node: TreeDataNode; path: React.ReactNode[] }> {\n const result: Array<{ node: TreeDataNode; path: React.ReactNode[] }> = []\n\n data.forEach((node) => {\n const title = getFieldValue(node, 'title', fieldNames) as React.ReactNode\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n const currentPath = [...parentPath, title]\n result.push({ node, path: currentPath })\n if (children) {\n result.push(...flattenTree(children, currentPath, fieldNames))\n }\n })\n\n return result\n}\n\n// Helper to get all keys\nfunction getAllKeys(data: TreeDataNode[], fieldNames?: TreeSelectFieldNames): string[] {\n const keys: string[] = []\n const traverse = (nodes: TreeDataNode[]) => {\n nodes.forEach((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n keys.push(key)\n if (children) traverse(children)\n })\n }\n traverse(data)\n return keys\n}\n\n// Helper to find node by key\nfunction findNode(\n data: TreeDataNode[],\n key: string,\n fieldNames?: TreeSelectFieldNames\n): TreeDataNode | null {\n for (const node of data) {\n const nodeKey = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n if (nodeKey === key) return node\n if (children) {\n const found = findNode(children, key, fieldNames)\n if (found) return found\n }\n }\n return null\n}\n\n// Helper to get all descendant keys\nfunction getDescendantKeys(node: TreeDataNode, fieldNames?: TreeSelectFieldNames): string[] {\n const keys: string[] = []\n const traverse = (n: TreeDataNode) => {\n const children = getFieldValue(n, 'children', fieldNames) as TreeDataNode[] | undefined\n if (children) {\n children.forEach((child) => {\n const childKey = getFieldValue(child, 'key', fieldNames) as string\n keys.push(childKey)\n traverse(child)\n })\n }\n }\n traverse(node)\n return keys\n}\n\n// Helper to get parent keys for a node\nfunction getParentKeys(\n data: TreeDataNode[],\n targetKey: string,\n fieldNames?: TreeSelectFieldNames,\n parentKeys: string[] = []\n): string[] | null {\n for (const node of data) {\n const nodeKey = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n if (nodeKey === targetKey) return parentKeys\n if (children) {\n const found = getParentKeys(children, targetKey, fieldNames, [...parentKeys, nodeKey])\n if (found) return found\n }\n }\n return null\n}\n\ninterface TreeSelectNodeProps {\n node: TreeDataNode\n level: number\n expanded: boolean\n selected: boolean\n checked: boolean\n indeterminate: boolean\n treeCheckable: boolean\n treeLine: boolean\n treeIcon: boolean\n focused: boolean\n loading: boolean\n baseTestId: string\n id: string\n fieldNames?: TreeSelectFieldNames\n switcherIcon?: React.ReactNode | ((props: { expanded: boolean }) => React.ReactNode)\n onToggle: (key: string) => void\n onSelect: (key: string, node: TreeDataNode) => void\n onCheck: (key: string, node: TreeDataNode) => void\n renderChildren: (children: TreeDataNode[], level: number) => React.ReactNode\n}\n\nfunction TreeSelectNode({\n node,\n level,\n expanded,\n selected,\n checked,\n indeterminate,\n treeCheckable,\n treeLine,\n treeIcon: showTreeIcon,\n focused,\n loading,\n baseTestId,\n id,\n fieldNames,\n switcherIcon,\n onToggle,\n onSelect,\n onCheck,\n renderChildren,\n}: TreeSelectNodeProps) {\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n const title = getFieldValue(node, 'title', fieldNames) as React.ReactNode\n const key = getFieldValue(node, 'key', fieldNames) as string\n const nodeIcon = node.icon\n const hasChildren = children && children.length > 0\n const isLeaf = node.isLeaf ?? !hasChildren\n\n const handleToggle = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!isLeaf) {\n onToggle(key)\n }\n }\n\n const handleSelect = () => {\n if (!node.disabled) {\n if (treeCheckable) {\n onCheck(key, node)\n } else {\n onSelect(key, node)\n }\n }\n }\n\n const handleCheck = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!node.disabled) {\n onCheck(key, node)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSelect()\n }\n }\n\n const renderSwitcherIcon = () => {\n if (loading) {\n return (\n <span className=\"loading loading-spinner loading-xs\" />\n )\n }\n\n if (switcherIcon) {\n if (typeof switcherIcon === 'function') {\n return switcherIcon({ expanded })\n }\n return switcherIcon\n }\n\n return (\n <svg\n className={`w-3 h-3 transition-transform ${expanded ? 'rotate-90' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n }\n\n return (\n <div\n className=\"tree-select-node\"\n role=\"treeitem\"\n id={id}\n aria-selected={selected || checked}\n aria-expanded={hasChildren ? expanded : undefined}\n data-testid={`${baseTestId}-option-${key}`}\n data-state={selected || checked ? 'selected' : 'unselected'}\n data-disabled={node.disabled || undefined}\n >\n <div\n className={[\n 'flex items-center py-1.5 px-2 cursor-pointer hover:bg-base-200 transition-colors outline-none',\n (selected || checked) && 'bg-primary/10 text-primary',\n node.disabled && 'opacity-50 cursor-not-allowed',\n focused && 'ring-2 ring-primary ring-inset',\n treeLine && level > 0 && 'border-l border-base-300 ml-2',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ paddingLeft: `${level * 16 + 8}px` }}\n onClick={handleSelect}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n {/* Expand/Collapse icon */}\n <span\n className={[\n 'w-4 h-4 flex items-center justify-center flex-shrink-0 mr-1',\n !isLeaf && 'cursor-pointer',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleToggle}\n aria-hidden=\"true\"\n >\n {!isLeaf && renderSwitcherIcon()}\n </span>\n\n {/* Checkbox for treeCheckable mode */}\n {treeCheckable && (\n <span className=\"mr-2 flex-shrink-0\" onClick={handleCheck}>\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={checked}\n ref={(el) => {\n if (el) el.indeterminate = indeterminate\n }}\n disabled={node.disabled}\n onChange={handleSelect}\n aria-label={typeof title === 'string' ? title : undefined}\n tabIndex={-1}\n />\n </span>\n )}\n\n {/* Node icon */}\n {showTreeIcon && nodeIcon && (\n <span className=\"mr-1.5 flex-shrink-0 flex items-center\">{nodeIcon}</span>\n )}\n\n {/* Title */}\n <span className=\"flex-1 truncate select-none text-sm\">{title}</span>\n </div>\n\n {/* Children */}\n {hasChildren && expanded && (\n <div role=\"group\">{renderChildren(children!, level + 1)}</div>\n )}\n </div>\n )\n}\n\nconst sizeClasses: Record<TreeSelectSize, string> = {\n xs: 'min-h-6 text-xs',\n sm: 'min-h-8 text-sm',\n md: 'min-h-10 text-base',\n lg: 'min-h-12 text-lg',\n xl: 'min-h-14 text-xl',\n}\n\nconst colorClasses: Record<TreeSelectColor, string> = {\n primary: 'border-primary focus-within:border-primary',\n secondary: 'border-secondary focus-within:border-secondary',\n accent: 'border-accent focus-within:border-accent',\n neutral: 'border-neutral focus-within:border-neutral',\n info: 'border-info focus-within:border-info',\n success: 'border-success focus-within:border-success',\n warning: 'border-warning focus-within:border-warning',\n error: 'border-error focus-within:border-error',\n}\n\nconst statusClasses: Record<TreeSelectStatus, string> = {\n error: 'border-error focus-within:border-error',\n warning: 'border-warning focus-within:border-warning',\n}\n\nconst variantClasses: Record<TreeSelectVariant, string> = {\n outlined: 'border border-base-300',\n filled: 'bg-base-200 border-transparent',\n borderless: 'border-transparent',\n}\n\nexport const TreeSelect = forwardRef<HTMLDivElement, TreeSelectProps>(\n (\n {\n treeData,\n value: controlledValue,\n defaultValue = [],\n onChange,\n multiple = false,\n treeCheckable = false,\n treeCheckStrictly = false,\n showCheckedStrategy = 'SHOW_ALL',\n showSearch = false,\n searchValue: controlledSearchValue,\n onSearch,\n filterTreeNode,\n placeholder = 'Please select',\n allowClear = true,\n disabled = false,\n treeDefaultExpandAll = false,\n treeDefaultExpandedKeys = [],\n treeExpandedKeys: controlledExpandedKeys,\n onTreeExpand,\n size = 'md',\n color,\n status,\n variant = 'outlined',\n ghost = false,\n maxTagCount,\n maxTagPlaceholder,\n maxCount,\n labelInValue = false,\n tagRender,\n treeLine = false,\n treeIcon = false,\n loadData,\n fieldNames,\n open: controlledOpen,\n onDropdownVisibleChange,\n suffixIcon,\n switcherIcon,\n notFoundContent = 'No results found',\n dropdownRender,\n popupClassName = '',\n className = '',\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const baseTestId = testId ?? 'treeselect'\n const instanceId = useId()\n const listboxId = `${instanceId}-listbox`\n const [isOpen, setIsOpen] = useState(false)\n const [internalSearchValue, setInternalSearchValue] = useState('')\n const [focusedKey, setFocusedKey] = useState<string | null>(null)\n const [loadingKeys, setLoadingKeys] = useState<Set<string>>(new Set())\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const searchValue = controlledSearchValue ?? internalSearchValue\n const open = controlledOpen ?? isOpen\n\n // Normalize value to array - handle labelInValue format\n const normalizeValue = (val: string | string[] | LabeledValue | LabeledValue[] | undefined): string[] => {\n if (val === undefined) return []\n if (Array.isArray(val)) {\n return val.map((v) => (typeof v === 'object' && v !== null ? v.value : v))\n }\n if (typeof val === 'object' && val !== null) {\n return [(val as LabeledValue).value]\n }\n return [val as string]\n }\n\n const initialValue = normalizeValue(defaultValue)\n const [internalValue, setInternalValue] = useState<string[]>(initialValue)\n\n const value = controlledValue !== undefined ? normalizeValue(controlledValue) : internalValue\n\n // Expanded keys\n const initialExpandedKeys = useMemo(() => {\n if (treeDefaultExpandAll) return getAllKeys(treeData, fieldNames)\n return treeDefaultExpandedKeys\n }, [treeData, treeDefaultExpandAll, treeDefaultExpandedKeys, fieldNames])\n\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<string[]>(initialExpandedKeys)\n const expandedKeys = controlledExpandedKeys ?? internalExpandedKeys\n\n // Get flattened visible nodes for keyboard navigation\n const visibleNodes = useMemo(() => {\n const nodes: { key: string; node: TreeDataNode }[] = []\n const traverse = (data: TreeDataNode[]) => {\n data.forEach((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n nodes.push({ key, node })\n if (children && expandedKeys.includes(key)) {\n traverse(children)\n }\n })\n }\n traverse(treeData)\n return nodes\n }, [treeData, expandedKeys, fieldNames])\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setIsOpen(newOpen)\n }\n onDropdownVisibleChange?.(newOpen)\n },\n [controlledOpen, onDropdownVisibleChange]\n )\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [setOpen, controlledSearchValue])\n\n // Focus management\n useEffect(() => {\n if (open && showSearch && inputRef.current) {\n inputRef.current.focus()\n } else if (open && triggerRef.current) {\n triggerRef.current.focus()\n }\n }, [open, showSearch])\n\n // Initialize focused key when opening\n useEffect(() => {\n if (open && visibleNodes.length > 0) {\n if (value.length > 0) {\n setFocusedKey(value[0])\n } else {\n setFocusedKey(visibleNodes[0].key)\n }\n } else if (!open) {\n setFocusedKey(null)\n }\n }, [open, visibleNodes, value])\n\n // Filter tree data based on search\n const filteredData = useMemo(() => {\n if (!searchValue) return treeData\n\n const flatNodes = flattenTree(treeData, [], fieldNames)\n const matchingKeys = new Set<string>()\n\n flatNodes.forEach(({ node }) => {\n const title = getFieldValue(node, 'title', fieldNames)\n const key = getFieldValue(node, 'key', fieldNames) as string\n\n let isMatch = false\n if (filterTreeNode) {\n isMatch = filterTreeNode(searchValue, node)\n } else {\n const titleStr = typeof title === 'string' ? title : String(title)\n isMatch = titleStr.toLowerCase().includes(searchValue.toLowerCase())\n }\n\n if (isMatch) {\n matchingKeys.add(key)\n }\n })\n\n // Include parent keys of matching nodes\n const filterTree = (nodes: TreeDataNode[]): TreeDataNode[] => {\n return nodes\n .map((node) => {\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n const key = getFieldValue(node, 'key', fieldNames) as string\n const hasMatchingChildren = children && filterTree(children).length > 0\n const isMatch = matchingKeys.has(key)\n\n if (isMatch || hasMatchingChildren) {\n return {\n ...node,\n children: children ? filterTree(children) : undefined,\n }\n }\n return null\n })\n .filter(Boolean) as TreeDataNode[]\n }\n\n return filterTree(treeData)\n }, [treeData, searchValue, filterTreeNode, fieldNames])\n\n const handleToggle = useCallback(\n async (key: string) => {\n const node = findNode(treeData, key, fieldNames)\n\n // Handle async loading\n if (loadData && node) {\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n if (!children || children.length === 0) {\n setLoadingKeys((prev) => new Set(prev).add(key))\n try {\n await loadData(node)\n } finally {\n setLoadingKeys((prev) => {\n const next = new Set(prev)\n next.delete(key)\n return next\n })\n }\n }\n }\n\n const newKeys = expandedKeys.includes(key)\n ? expandedKeys.filter((k) => k !== key)\n : [...expandedKeys, key]\n\n if (controlledExpandedKeys === undefined) {\n setInternalExpandedKeys(newKeys)\n }\n onTreeExpand?.(newKeys)\n },\n [expandedKeys, controlledExpandedKeys, onTreeExpand, loadData, treeData, fieldNames]\n )\n\n const handleSelect = useCallback(\n (key: string, triggerNode: TreeDataNode) => {\n let newValue: string[]\n\n if (multiple) {\n if (value.includes(key)) {\n newValue = value.filter((k) => k !== key)\n } else {\n // Check maxCount limit\n if (maxCount !== undefined && value.length >= maxCount) {\n return // Don't add more if at limit\n }\n newValue = [...value, key]\n }\n } else {\n newValue = [key]\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k\n })\n\n // Build return value based on labelInValue setting\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(\n multiple ? labeledValues : labeledValues[0] || { value: '', label: '' },\n labels,\n { triggerValue: key, triggerNode }\n )\n } else {\n onChange?.(multiple ? newValue : newValue[0] || '', labels, { triggerValue: key, triggerNode })\n }\n },\n [\n value,\n multiple,\n maxCount,\n controlledValue,\n onChange,\n treeData,\n setOpen,\n controlledSearchValue,\n fieldNames,\n labelInValue,\n ]\n )\n\n const handleCheck = useCallback(\n (key: string, triggerNode: TreeDataNode) => {\n const isChecked = value.includes(key)\n let newValue = [...value]\n\n if (treeCheckStrictly) {\n // No parent-child association\n if (isChecked) {\n newValue = newValue.filter((k) => k !== key)\n } else {\n // Check maxCount limit\n if (maxCount !== undefined && value.length >= maxCount) {\n return // Don't add more if at limit\n }\n newValue.push(key)\n }\n } else {\n const descendantKeys = getDescendantKeys(triggerNode, fieldNames)\n\n if (isChecked) {\n newValue = newValue.filter((k) => k !== key && !descendantKeys.includes(k))\n } else {\n // Check maxCount limit for adding multiple\n const keysToAdd = [key, ...descendantKeys.filter((dk) => !newValue.includes(dk))]\n if (maxCount !== undefined && newValue.length + keysToAdd.length > maxCount) {\n // Add only up to maxCount\n const remainingSlots = maxCount - newValue.length\n if (remainingSlots <= 0) return\n keysToAdd.slice(0, remainingSlots).forEach((k) => newValue.push(k))\n } else {\n newValue.push(key)\n descendantKeys.forEach((dk) => {\n if (!newValue.includes(dk)) newValue.push(dk)\n })\n }\n }\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const n = findNode(treeData, k, fieldNames)\n return n ? getFieldValue(n, 'title', fieldNames) as React.ReactNode : k\n })\n\n // Build return value based on labelInValue setting\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(labeledValues, labels, { triggerValue: key, triggerNode })\n } else {\n onChange?.(newValue, labels, { triggerValue: key, triggerNode })\n }\n },\n [value, controlledValue, onChange, treeData, treeCheckStrictly, fieldNames, maxCount, labelInValue]\n )\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n const newValue: string[] = []\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n if (labelInValue) {\n onChange?.(multiple || treeCheckable ? [] : { value: '', label: '' }, [])\n } else {\n onChange?.(multiple || treeCheckable ? newValue : '', [])\n }\n }\n\n const removeTag = (key: string, e: React.MouseEvent) => {\n e.stopPropagation()\n const newValue = value.filter((k) => k !== key)\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const n = findNode(treeData, k, fieldNames)\n return n ? getFieldValue(n, 'title', fieldNames) as React.ReactNode : k\n })\n\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(\n multiple || treeCheckable ? labeledValues : labeledValues[0] || { value: '', label: '' },\n labels\n )\n } else {\n onChange?.(multiple || treeCheckable ? newValue : newValue[0] || '', labels)\n }\n }\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n if (controlledSearchValue === undefined) {\n setInternalSearchValue(newValue)\n }\n onSearch?.(newValue)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (!open) {\n e.preventDefault()\n setOpen(true)\n } else if (focusedKey) {\n e.preventDefault()\n const node = findNode(treeData, focusedKey, fieldNames)\n if (node && !node.disabled) {\n if (treeCheckable) {\n handleCheck(focusedKey, node)\n } else {\n handleSelect(focusedKey, node)\n }\n }\n }\n break\n\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n triggerRef.current?.focus()\n break\n\n case 'ArrowDown':\n e.preventDefault()\n if (!open) {\n setOpen(true)\n } else {\n const currentIndex = visibleNodes.findIndex((n) => n.key === focusedKey)\n const nextIndex = currentIndex < visibleNodes.length - 1 ? currentIndex + 1 : 0\n setFocusedKey(visibleNodes[nextIndex]?.key || null)\n }\n break\n\n case 'ArrowUp':\n e.preventDefault()\n if (open) {\n const currentIndex = visibleNodes.findIndex((n) => n.key === focusedKey)\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleNodes.length - 1\n setFocusedKey(visibleNodes[prevIndex]?.key || null)\n }\n break\n\n case 'ArrowRight':\n if (open && focusedKey) {\n e.preventDefault()\n const node = findNode(treeData, focusedKey, fieldNames)\n const children = node\n ? (getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined)\n : undefined\n if (children && children.length > 0 && !expandedKeys.includes(focusedKey)) {\n handleToggle(focusedKey)\n }\n }\n break\n\n case 'ArrowLeft':\n if (open && focusedKey) {\n e.preventDefault()\n if (expandedKeys.includes(focusedKey)) {\n handleToggle(focusedKey)\n } else {\n // Move to parent\n const parentKeys = getParentKeys(treeData, focusedKey, fieldNames)\n if (parentKeys && parentKeys.length > 0) {\n setFocusedKey(parentKeys[parentKeys.length - 1])\n }\n }\n }\n break\n\n case 'Home':\n if (open) {\n e.preventDefault()\n setFocusedKey(visibleNodes[0]?.key || null)\n }\n break\n\n case 'End':\n if (open) {\n e.preventDefault()\n setFocusedKey(visibleNodes[visibleNodes.length - 1]?.key || null)\n }\n break\n }\n }\n\n const getCheckedState = useCallback(\n (node: TreeDataNode): { checked: boolean; indeterminate: boolean } => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n\n if (treeCheckStrictly) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n if (!children || children.length === 0) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n const descendantKeys = getDescendantKeys(node, fieldNames)\n const checkedDescendants = descendantKeys.filter((k) => value.includes(k))\n\n if (checkedDescendants.length === 0) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n if (checkedDescendants.length === descendantKeys.length) {\n return { checked: true, indeterminate: false }\n }\n\n return { checked: false, indeterminate: true }\n },\n [value, treeCheckStrictly, fieldNames]\n )\n\n const renderNodes = useCallback(\n (nodes: TreeDataNode[], level: number): React.ReactNode => {\n return nodes.map((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const { checked, indeterminate } = getCheckedState(node)\n\n return (\n <TreeSelectNode\n key={key}\n node={node}\n level={level}\n expanded={expandedKeys.includes(key)}\n selected={value.includes(key)}\n checked={checked}\n indeterminate={indeterminate}\n treeCheckable={treeCheckable}\n treeLine={treeLine}\n treeIcon={treeIcon}\n focused={focusedKey === key}\n loading={loadingKeys.has(key)}\n baseTestId={baseTestId}\n id={`${instanceId}-option-${key}`}\n fieldNames={fieldNames}\n switcherIcon={switcherIcon}\n onToggle={handleToggle}\n onSelect={handleSelect}\n onCheck={handleCheck}\n renderChildren={renderNodes}\n />\n )\n })\n },\n [\n expandedKeys,\n value,\n treeCheckable,\n treeLine,\n treeIcon,\n focusedKey,\n loadingKeys,\n baseTestId,\n instanceId,\n fieldNames,\n switcherIcon,\n handleToggle,\n handleSelect,\n handleCheck,\n getCheckedState,\n ]\n )\n\n // Display value with showCheckedStrategy\n const displayValue = useMemo(() => {\n if (value.length === 0) return null\n\n let displayKeys = value\n\n if ((treeCheckable || multiple) && showCheckedStrategy !== 'SHOW_ALL') {\n if (showCheckedStrategy === 'SHOW_PARENT') {\n // Only show parent nodes when all children are selected\n displayKeys = value.filter((key) => {\n const parentKeys = getParentKeys(treeData, key, fieldNames)\n if (!parentKeys) return true\n // Check if any parent is fully selected\n return !parentKeys.some((pk) => value.includes(pk))\n })\n } else if (showCheckedStrategy === 'SHOW_CHILD') {\n // Only show leaf nodes\n displayKeys = value.filter((key) => {\n const node = findNode(treeData, key, fieldNames)\n if (!node) return true\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n return !children || children.length === 0\n })\n }\n }\n\n if (multiple || treeCheckable) {\n let keysToShow = displayKeys\n let hiddenCount = 0\n\n if (maxTagCount !== undefined && maxTagCount !== 'responsive') {\n if (displayKeys.length > maxTagCount) {\n keysToShow = displayKeys.slice(0, maxTagCount)\n hiddenCount = displayKeys.length - maxTagCount\n }\n }\n\n const tags = keysToShow.map((key) => {\n const node = findNode(treeData, key, fieldNames)\n const title = node ? getFieldValue(node, 'title', fieldNames) : key\n const label = title as React.ReactNode\n const closable = !disabled\n const onClose = () => {\n const fakeEvent = { stopPropagation: () => {} } as React.MouseEvent\n removeTag(key, fakeEvent)\n }\n\n // Use custom tagRender if provided\n if (tagRender) {\n return (\n <React.Fragment key={key}>\n {tagRender({ label, value: key, closable, onClose })}\n </React.Fragment>\n )\n }\n\n return (\n <span\n key={key}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-base-200 rounded text-sm mr-1 mb-1\"\n data-testid={`${baseTestId}-tag-${key}`}\n >\n {label}\n {closable && (\n <button\n type=\"button\"\n className=\"hover:text-error\"\n onClick={(e) => removeTag(key, e)}\n aria-label={`Remove ${typeof title === 'string' ? title : key}`}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </span>\n )\n })\n\n if (hiddenCount > 0) {\n const hiddenKeys = displayKeys.slice(maxTagCount as number)\n const placeholder =\n typeof maxTagPlaceholder === 'function'\n ? maxTagPlaceholder(hiddenKeys)\n : maxTagPlaceholder || `+${hiddenCount} more`\n\n tags.push(\n <span\n key=\"__more__\"\n className=\"inline-flex items-center px-2 py-0.5 bg-base-200 rounded text-sm mr-1 mb-1\"\n >\n {placeholder}\n </span>\n )\n }\n\n return tags\n }\n\n const node = findNode(treeData, value[0], fieldNames)\n const title = node ? getFieldValue(node, 'title', fieldNames) : value[0]\n return title as React.ReactNode\n }, [\n value,\n treeData,\n multiple,\n treeCheckable,\n showCheckedStrategy,\n maxTagCount,\n maxTagPlaceholder,\n baseTestId,\n fieldNames,\n disabled,\n tagRender,\n ])\n\n const borderClass = status ? statusClasses[status] : color ? colorClasses[color] : ''\n const variantClass = ghost ? 'bg-transparent border-transparent' : variantClasses[variant]\n\n const dropdownContent = (\n <div className=\"py-1\" role=\"tree\" aria-label=\"Tree options\">\n {filteredData.length > 0 ? (\n renderNodes(filteredData, 0)\n ) : (\n <div\n className=\"px-4 py-2 text-base-content/50 text-sm text-center\"\n data-testid={`${baseTestId}-empty`}\n >\n {notFoundContent}\n </div>\n )}\n </div>\n )\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }}\n className={`relative ${className}`}\n data-testid={baseTestId}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled || undefined}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {/* Trigger */}\n <div\n ref={triggerRef}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"tree\"\n aria-owns={open ? listboxId : undefined}\n aria-activedescendant={open && focusedKey ? `${instanceId}-option-${focusedKey}` : undefined}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={[\n 'input flex items-center gap-2 cursor-pointer flex-wrap',\n sizeClasses[size],\n variantClass,\n borderClass,\n disabled && 'input-disabled opacity-50 cursor-not-allowed',\n open && !borderClass && 'border-primary',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !disabled && setOpen(!open)}\n data-testid={`${baseTestId}-trigger`}\n >\n <div className=\"flex-1 flex flex-wrap items-center gap-1 min-w-0\">\n {displayValue || <span className=\"text-base-content/50\">{placeholder}</span>}\n </div>\n\n {/* Clear button */}\n {allowClear && value.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"hover:text-error flex-shrink-0\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n\n {/* Suffix icon / Dropdown arrow */}\n {suffixIcon || (\n <svg\n className={`w-4 h-4 flex-shrink-0 transition-transform ${open ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n )}\n </div>\n\n {/* Dropdown */}\n {open && (\n <div\n id={listboxId}\n className={`absolute z-50 mt-1 w-full bg-base-100 border border-base-300 rounded-lg shadow-lg max-h-64 overflow-auto ${popupClassName}`}\n data-testid={`${baseTestId}-dropdown`}\n >\n {/* Search input */}\n {showSearch && (\n <div className=\"p-2 border-b border-base-300\">\n <input\n ref={inputRef}\n type=\"text\"\n className=\"input input-sm w-full\"\n placeholder=\"Search...\"\n value={searchValue}\n onChange={handleSearchChange}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Search tree options\"\n data-testid={`${baseTestId}-search`}\n />\n </div>\n )}\n\n {/* Tree */}\n {dropdownRender ? dropdownRender(dropdownContent) : dropdownContent}\n </div>\n )}\n </div>\n )\n }\n)\n\nTreeSelect.displayName = 'TreeSelect'\n\n// Attach static strategy constants to TreeSelect\nexport const TreeSelectComponent = Object.assign(TreeSelect, {\n SHOW_ALL,\n SHOW_PARENT,\n SHOW_CHILD,\n})\n\nexport { TreeSelectComponent as default }\n"],"names":["SHOW_ALL","SHOW_PARENT","SHOW_CHILD","getFieldValue","node","field","fieldNames","labelField","valueField","childrenField","flattenTree","data","parentPath","result","title","children","currentPath","getAllKeys","keys","traverse","nodes","key","findNode","nodeKey","found","getDescendantKeys","n","child","childKey","getParentKeys","targetKey","parentKeys","TreeSelectNode","level","expanded","selected","checked","indeterminate","treeCheckable","treeLine","showTreeIcon","focused","loading","baseTestId","id","switcherIcon","onToggle","onSelect","onCheck","renderChildren","nodeIcon","hasChildren","isLeaf","handleToggle","e","handleSelect","handleCheck","handleKeyDown","renderSwitcherIcon","jsx","jsxs","el","sizeClasses","colorClasses","statusClasses","variantClasses","TreeSelect","forwardRef","treeData","controlledValue","defaultValue","onChange","multiple","treeCheckStrictly","showCheckedStrategy","showSearch","controlledSearchValue","onSearch","filterTreeNode","placeholder","allowClear","disabled","treeDefaultExpandAll","treeDefaultExpandedKeys","controlledExpandedKeys","onTreeExpand","size","color","status","variant","ghost","maxTagCount","maxTagPlaceholder","maxCount","labelInValue","tagRender","treeIcon","loadData","controlledOpen","onDropdownVisibleChange","suffixIcon","notFoundContent","dropdownRender","popupClassName","className","testId","rest","ref","instanceId","useId","listboxId","isOpen","setIsOpen","useState","internalSearchValue","setInternalSearchValue","focusedKey","setFocusedKey","loadingKeys","setLoadingKeys","containerRef","useRef","inputRef","triggerRef","searchValue","open","normalizeValue","val","v","initialValue","internalValue","setInternalValue","value","initialExpandedKeys","useMemo","internalExpandedKeys","setInternalExpandedKeys","expandedKeys","visibleNodes","setOpen","useCallback","newOpen","useEffect","handleClickOutside","filteredData","flatNodes","matchingKeys","isMatch","filterTree","hasMatchingChildren","prev","next","newKeys","k","triggerNode","newValue","labels","labeledValues","isChecked","descendantKeys","keysToAdd","dk","remainingSlots","handleClear","removeTag","handleSearchChange","currentIndex","nextIndex","prevIndex","getCheckedState","checkedDescendants","renderNodes","displayValue","displayKeys","pk","keysToShow","hiddenCount","tags","label","closable","onClose","React","hiddenKeys","borderClass","variantClass","dropdownContent","TreeSelectComponent"],"mappings":"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"}
|
package/dist/index94.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index94.js","sources":["../src/components/Typography.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\nexport type TypographySize = 'sm' | 'base' | 'lg' | 'xl' | '2xl'\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n size?: TypographySize\n}\n\nexport interface TitleProps extends Omit<React.HTMLAttributes<HTMLHeadingElement>, 'title'> {\n level?: TitleLevel\n children: React.ReactNode\n copyable?: boolean\n ellipsis?: boolean\n}\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n ellipsis?: boolean | { rows?: number; expandable?: boolean; onExpand?: () => void }\n copyable?: boolean\n size?: TypographySize\n align?: 'left' | 'center' | 'right'\n}\n\nexport interface TextProps extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode\n code?: boolean\n mark?: boolean\n strong?: boolean\n italic?: boolean\n underline?: boolean\n delete?: boolean\n type?: 'default' | 'secondary' | 'success' | 'warning' | 'error'\n copyable?: boolean\n}\n\nexport interface TypographyLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n href?: string\n children: React.ReactNode\n external?: boolean\n size?: TypographySize\n}\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n return (\n <button\n onClick={handleCopy}\n className=\"btn btn-ghost btn-xs ml-2 opacity-0 group-hover:opacity-100 transition-opacity\"\n title=\"Copy to clipboard\"\n >\n {copied ? (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z\" />\n <path d=\"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z\" />\n </svg>\n )}\n </button>\n )\n}\n\nfunction TypographyRoot({ children, size = 'base', className = '', ...rest }: TypographyProps) {\n const sizeClasses = {\n sm: 'prose-sm text-sm',\n base: 'prose-base text-base',\n lg: 'prose-lg text-lg',\n xl: 'prose-xl text-xl',\n '2xl': 'prose-2xl text-2xl',\n }\n\n const classes = [\n // Prose classes (only apply if @tailwindcss/typography is installed)\n 'prose dark:prose-invert max-w-none',\n // Fallback styles (always apply)\n 'text-base-content leading-relaxed',\n sizeClasses[size],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} {...rest}>{children}</div>\n}\n\nfunction Title({ level = 1, children, copyable, ellipsis, className = '', id, ...rest }: TitleProps) {\n const textContent = typeof children === 'string' ? children : ''\n const generatedId = id || (textContent ? textContent.toLowerCase().replace(/\\s+/g, '-') : undefined)\n\n const levelClasses = {\n 1: 'text-4xl font-bold mb-4',\n 2: 'text-3xl font-bold mb-3',\n 3: 'text-2xl font-semibold mb-3',\n 4: 'text-xl font-semibold mb-2',\n 5: 'text-lg font-semibold mb-2',\n }\n\n const ellipsisClass = ellipsis ? 'truncate' : ''\n const classes = `group ${levelClasses[level]} ${ellipsisClass} ${className}`.trim()\n\n const content = (\n <>\n {children}\n {copyable && <CopyButton text={textContent} />}\n </>\n )\n\n switch (level) {\n case 1:\n return <h1 id={generatedId} className={classes} {...rest}>{content}</h1>\n case 2:\n return <h2 id={generatedId} className={classes} {...rest}>{content}</h2>\n case 3:\n return <h3 id={generatedId} className={classes} {...rest}>{content}</h3>\n case 4:\n return <h4 id={generatedId} className={classes} {...rest}>{content}</h4>\n case 5:\n return <h5 id={generatedId} className={classes} {...rest}>{content}</h5>\n default:\n return <h1 id={generatedId} className={classes} {...rest}>{content}</h1>\n }\n}\n\nconst lineClampClasses = {\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6',\n} as const\n\nfunction Paragraph({ children, ellipsis, copyable, size, align, className = '', ...rest }: ParagraphProps) {\n const [expanded, setExpanded] = useState(false)\n const textContent = typeof children === 'string' ? children : ''\n\n const isEllipsisObject = typeof ellipsis === 'object'\n const rows = isEllipsisObject ? ellipsis.rows || 3 : 3\n const expandable = isEllipsisObject ? ellipsis.expandable : false\n\n const clampedRows = Math.min(Math.max(rows, 1), 6) as 1 | 2 | 3 | 4 | 5 | 6\n const ellipsisClass =\n ellipsis && !expanded ? lineClampClasses[clampedRows] : ''\n\n const classes = [\n 'group',\n 'mb-4',\n ellipsisClass,\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n align === 'left' && 'text-left',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div {...rest}>\n <p className={classes}>\n {children}\n {copyable && <CopyButton text={textContent} />}\n </p>\n {expandable && ellipsis && (\n <button\n onClick={() => {\n setExpanded(!expanded)\n if (isEllipsisObject && ellipsis.onExpand) {\n ellipsis.onExpand()\n }\n }}\n className=\"text-primary text-sm hover:underline\"\n >\n {expanded ? 'Show less' : 'Show more'}\n </button>\n )}\n </div>\n )\n}\n\nfunction Text({\n children,\n code,\n mark,\n strong,\n italic,\n underline,\n delete: del,\n type = 'default',\n copyable,\n className = '',\n ...rest\n}: TextProps) {\n const textContent = typeof children === 'string' ? children : ''\n\n const typeClasses = {\n default: '',\n secondary: 'text-base-content/70',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n }\n\n let content = children\n\n if (code) {\n content = (\n <code className=\"px-1.5 py-0.5 bg-base-200 rounded text-sm font-mono\">{content}</code>\n )\n }\n\n if (mark) {\n content = <mark className=\"bg-warning/30 px-1\">{content}</mark>\n }\n\n if (strong) {\n content = <strong className=\"font-bold\">{content}</strong>\n }\n\n if (italic) {\n content = <em className=\"italic\">{content}</em>\n }\n\n if (underline) {\n content = <u className=\"underline\">{content}</u>\n }\n\n if (del) {\n content = <del className=\"line-through opacity-70\">{content}</del>\n }\n\n const classes = `group inline ${typeClasses[type]} ${className}`.trim()\n\n return (\n <span className={classes} {...rest}>\n {content}\n {copyable && <CopyButton text={textContent} />}\n </span>\n )\n}\n\nfunction Link({ href = '#', children, target, external, size, className = '', ...rest }: TypographyLinkProps) {\n const isExternal = external || (href && href.startsWith('http'))\n const linkTarget = target || (isExternal ? '_blank' : undefined)\n const rel = isExternal ? 'noopener noreferrer' : undefined\n\n const classes = [\n 'link',\n 'link-primary',\n size === 'sm' && 'text-sm',\n size === 'base' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n size === '2xl' && 'text-2xl',\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <a\n href={href}\n target={linkTarget}\n rel={rel}\n className={classes}\n {...rest}\n >\n {children}\n {isExternal && (\n <svg className=\"w-3 h-3 inline-block ml-1\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z\" />\n <path d=\"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z\" />\n </svg>\n )}\n </a>\n )\n}\n\nexport const Typography = Object.assign(TypographyRoot, {\n Title,\n Paragraph,\n Text,\n Link,\n})\n\nexport default Typography\n"],"names":["CopyButton","text","copied","setCopied","useState","jsx","err","jsxs","TypographyRoot","children","size","className","rest","classes","Title","level","copyable","ellipsis","id","textContent","generatedId","levelClasses","ellipsisClass","content","Fragment","lineClampClasses","Paragraph","align","expanded","setExpanded","isEllipsisObject","rows","expandable","clampedRows","Text","code","mark","strong","italic","underline","del","type","typeClasses","Link","href","target","external","isExternal","linkTarget","rel","Typography"],"mappings":"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"}
|