asterui 0.12.27 → 0.12.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Collapse.d.ts +40 -20
- package/dist/index18.js +105 -64
- package/dist/index18.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,25 +1,45 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
export type CollapseSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export type CollapseIconPosition = 'start' | 'end';
|
|
4
|
+
export type CollapseCollapsible = 'header' | 'icon' | 'disabled';
|
|
5
|
+
export interface CollapseItemType {
|
|
6
|
+
/** Unique key for the panel */
|
|
7
|
+
key: string | number;
|
|
8
|
+
/** Panel header/label */
|
|
9
|
+
label: React.ReactNode;
|
|
10
|
+
/** Panel content */
|
|
11
11
|
children: React.ReactNode;
|
|
12
|
+
/** Extra element in the corner */
|
|
13
|
+
extra?: React.ReactNode;
|
|
14
|
+
/** Whether to show the arrow icon */
|
|
15
|
+
showArrow?: boolean;
|
|
16
|
+
/** Collapsible mode for this panel */
|
|
17
|
+
collapsible?: CollapseCollapsible;
|
|
18
|
+
/** Custom class name for this panel */
|
|
12
19
|
className?: string;
|
|
13
20
|
}
|
|
14
|
-
export interface
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
export interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
22
|
+
/** Collapse items */
|
|
23
|
+
items?: CollapseItemType[];
|
|
24
|
+
/** Currently active panel keys (controlled) */
|
|
25
|
+
activeKey?: string | number | (string | number)[];
|
|
26
|
+
/** Default active panel keys (uncontrolled) */
|
|
27
|
+
defaultActiveKey?: string | number | (string | number)[];
|
|
28
|
+
/** Accordion mode - only one panel open at a time */
|
|
29
|
+
accordion?: boolean;
|
|
30
|
+
/** Show border around panels */
|
|
31
|
+
bordered?: boolean;
|
|
32
|
+
/** Ghost mode - transparent background */
|
|
33
|
+
ghost?: boolean;
|
|
34
|
+
/** Size variant */
|
|
35
|
+
size?: CollapseSize;
|
|
36
|
+
/** Icon type */
|
|
37
|
+
icon?: 'arrow' | 'plus' | 'none';
|
|
38
|
+
/** Icon placement */
|
|
39
|
+
expandIconPlacement?: CollapseIconPosition;
|
|
40
|
+
/** Callback when panels change */
|
|
41
|
+
onChange?: (activeKey: (string | number)[]) => void;
|
|
42
|
+
/** Test ID */
|
|
43
|
+
'data-testid'?: string;
|
|
17
44
|
}
|
|
18
|
-
declare
|
|
19
|
-
declare function CollapseTitle({ children, className }: CollapseTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
-
declare function CollapseContent({ children, className }: CollapseContentProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
export declare const Collapse: typeof CollapseRoot & {
|
|
22
|
-
Title: typeof CollapseTitle;
|
|
23
|
-
Content: typeof CollapseContent;
|
|
24
|
-
};
|
|
25
|
-
export {};
|
|
45
|
+
export declare const Collapse: React.ForwardRefExoticComponent<CollapseProps & React.RefAttributes<HTMLDivElement>>;
|
package/dist/index18.js
CHANGED
|
@@ -1,74 +1,115 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
onChange: m,
|
|
10
|
-
icon: C = "arrow",
|
|
11
|
-
className: h = "",
|
|
12
|
-
...c
|
|
13
|
-
}) {
|
|
14
|
-
const [x, b] = f(u), e = l !== void 0 ? l : x, n = v(), a = () => {
|
|
15
|
-
const p = !e;
|
|
16
|
-
l === void 0 && b(p), m?.(p);
|
|
17
|
-
}, i = [
|
|
1
|
+
import { jsx as t, jsxs as y } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as h, useState as z } from "react";
|
|
3
|
+
const B = {
|
|
4
|
+
sm: "text-sm",
|
|
5
|
+
md: "text-base",
|
|
6
|
+
lg: "text-lg"
|
|
7
|
+
}, N = h(({ item: l, isOpen: s, onToggle: b, icon: c, expandIconPlacement: i, bordered: d, ghost: p, size: v, testId: f }, m) => {
|
|
8
|
+
const a = l.collapsible === "disabled", w = [
|
|
18
9
|
"collapse",
|
|
19
|
-
"bg-base-200",
|
|
20
10
|
{
|
|
21
11
|
arrow: "collapse-arrow",
|
|
22
12
|
plus: "collapse-plus",
|
|
23
13
|
none: ""
|
|
24
|
-
}[
|
|
25
|
-
|
|
26
|
-
!
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
14
|
+
}[c],
|
|
15
|
+
s ? "collapse-open" : "collapse-close",
|
|
16
|
+
!p && "bg-base-200",
|
|
17
|
+
p && "bg-transparent",
|
|
18
|
+
d && "border border-base-300",
|
|
19
|
+
i === "end" && c !== "none" && "collapse-arrow-end",
|
|
20
|
+
B[v],
|
|
21
|
+
a && "opacity-50 cursor-not-allowed",
|
|
22
|
+
l.className
|
|
23
|
+
].filter(Boolean).join(" "), u = () => {
|
|
24
|
+
a || b();
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ y(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
ref: m,
|
|
30
|
+
className: w,
|
|
31
|
+
"data-testid": f ? `${f}-panel-${l.key}` : void 0,
|
|
32
|
+
"data-state": s ? "open" : "closed",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ y(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
className: "collapse-title font-medium flex items-center justify-between cursor-pointer",
|
|
38
|
+
onClick: u,
|
|
39
|
+
role: "button",
|
|
40
|
+
tabIndex: a ? -1 : 0,
|
|
41
|
+
onKeyDown: (o) => {
|
|
42
|
+
(o.key === "Enter" || o.key === " ") && (o.preventDefault(), u());
|
|
43
|
+
},
|
|
44
|
+
"aria-expanded": s,
|
|
45
|
+
"aria-disabled": a,
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ t("span", { children: l.label }),
|
|
48
|
+
l.extra && /* @__PURE__ */ t("span", { className: "ml-auto mr-6", children: l.extra })
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
/* @__PURE__ */ t("div", { className: "collapse-content", children: l.children })
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
N.displayName = "CollapsePanel";
|
|
58
|
+
const P = h(
|
|
59
|
+
({
|
|
60
|
+
items: l = [],
|
|
61
|
+
activeKey: s,
|
|
62
|
+
defaultActiveKey: b,
|
|
63
|
+
accordion: c = !1,
|
|
64
|
+
bordered: i = !0,
|
|
65
|
+
ghost: d = !1,
|
|
66
|
+
size: p = "md",
|
|
67
|
+
icon: v = "arrow",
|
|
68
|
+
expandIconPlacement: f = "start",
|
|
69
|
+
onChange: m,
|
|
70
|
+
className: a = "",
|
|
71
|
+
"data-testid": x = "collapse",
|
|
72
|
+
...w
|
|
73
|
+
}, u) => {
|
|
74
|
+
const o = (e) => e === void 0 ? [] : Array.isArray(e) ? e : [e], [g, A] = z(
|
|
75
|
+
() => o(b)
|
|
76
|
+
), C = s !== void 0, n = C ? o(s) : g, j = (e) => {
|
|
77
|
+
let r;
|
|
78
|
+
c ? r = n.includes(e) ? [] : [e] : n.includes(e) ? r = n.filter((D) => D !== e) : r = [...n, e], C || A(r), m?.(r);
|
|
79
|
+
}, K = [
|
|
80
|
+
"flex flex-col",
|
|
81
|
+
i && !d && "divide-y divide-base-300",
|
|
82
|
+
i && "border border-base-300 rounded-lg overflow-hidden",
|
|
83
|
+
a
|
|
84
|
+
].filter(Boolean).join(" ");
|
|
85
|
+
return /* @__PURE__ */ t(
|
|
86
|
+
"div",
|
|
46
87
|
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
88
|
+
ref: u,
|
|
89
|
+
className: K,
|
|
90
|
+
"data-testid": x,
|
|
91
|
+
...w,
|
|
92
|
+
children: l.map((e) => /* @__PURE__ */ t(
|
|
93
|
+
N,
|
|
94
|
+
{
|
|
95
|
+
item: e,
|
|
96
|
+
isOpen: n.includes(e.key),
|
|
97
|
+
onToggle: () => j(e.key),
|
|
98
|
+
icon: e.showArrow === !1 ? "none" : v,
|
|
99
|
+
expandIconPlacement: f,
|
|
100
|
+
bordered: !1,
|
|
101
|
+
ghost: d,
|
|
102
|
+
size: p,
|
|
103
|
+
testId: x
|
|
104
|
+
},
|
|
105
|
+
e.key
|
|
106
|
+
))
|
|
53
107
|
}
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
function k({ children: t, className: s = "" }) {
|
|
59
|
-
const l = w(d);
|
|
60
|
-
if (!l)
|
|
61
|
-
throw new Error("Collapse.Title must be used within Collapse");
|
|
62
|
-
return /* @__PURE__ */ o("label", { htmlFor: l.checkboxId, className: `collapse-title text-xl font-medium ${s}`, children: t });
|
|
63
|
-
}
|
|
64
|
-
function y({ children: t, className: s = "" }) {
|
|
65
|
-
return /* @__PURE__ */ o("div", { className: `collapse-content ${s}`, children: t });
|
|
66
|
-
}
|
|
67
|
-
const E = Object.assign(g, {
|
|
68
|
-
Title: k,
|
|
69
|
-
Content: y
|
|
70
|
-
});
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
P.displayName = "Collapse";
|
|
71
112
|
export {
|
|
72
|
-
|
|
113
|
+
P as Collapse
|
|
73
114
|
};
|
|
74
115
|
//# sourceMappingURL=index18.js.map
|
package/dist/index18.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index18.js","sources":["../src/components/Collapse.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"index18.js","sources":["../src/components/Collapse.tsx"],"sourcesContent":["import React, { forwardRef, useState } from 'react'\n\nexport type CollapseSize = 'sm' | 'md' | 'lg'\nexport type CollapseIconPosition = 'start' | 'end'\nexport type CollapseCollapsible = 'header' | 'icon' | 'disabled'\n\nexport interface CollapseItemType {\n /** Unique key for the panel */\n key: string | number\n /** Panel header/label */\n label: React.ReactNode\n /** Panel content */\n children: React.ReactNode\n /** Extra element in the corner */\n extra?: React.ReactNode\n /** Whether to show the arrow icon */\n showArrow?: boolean\n /** Collapsible mode for this panel */\n collapsible?: CollapseCollapsible\n /** Custom class name for this panel */\n className?: string\n}\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Collapse items */\n items?: CollapseItemType[]\n /** Currently active panel keys (controlled) */\n activeKey?: string | number | (string | number)[]\n /** Default active panel keys (uncontrolled) */\n defaultActiveKey?: string | number | (string | number)[]\n /** Accordion mode - only one panel open at a time */\n accordion?: boolean\n /** Show border around panels */\n bordered?: boolean\n /** Ghost mode - transparent background */\n ghost?: boolean\n /** Size variant */\n size?: CollapseSize\n /** Icon type */\n icon?: 'arrow' | 'plus' | 'none'\n /** Icon placement */\n expandIconPlacement?: CollapseIconPosition\n /** Callback when panels change */\n onChange?: (activeKey: (string | number)[]) => void\n /** Test ID */\n 'data-testid'?: string\n}\n\nconst sizeClasses: Record<CollapseSize, string> = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n}\n\nconst CollapsePanel = forwardRef<\n HTMLDivElement,\n {\n item: CollapseItemType\n isOpen: boolean\n onToggle: () => void\n icon: 'arrow' | 'plus' | 'none'\n expandIconPlacement: CollapseIconPosition\n bordered: boolean\n ghost: boolean\n size: CollapseSize\n testId?: string\n }\n>(({ item, isOpen, onToggle, icon, expandIconPlacement, bordered, ghost, size, testId }, ref) => {\n const isDisabled = item.collapsible === 'disabled'\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const panelClasses = [\n 'collapse',\n iconClasses[icon],\n isOpen ? 'collapse-open' : 'collapse-close',\n !ghost && 'bg-base-200',\n ghost && 'bg-transparent',\n bordered && 'border border-base-300',\n expandIconPlacement === 'end' && icon !== 'none' && 'collapse-arrow-end',\n sizeClasses[size],\n isDisabled && 'opacity-50 cursor-not-allowed',\n item.className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (!isDisabled) {\n onToggle()\n }\n }\n\n return (\n <div\n ref={ref}\n className={panelClasses}\n data-testid={testId ? `${testId}-panel-${item.key}` : undefined}\n data-state={isOpen ? 'open' : 'closed'}\n >\n <div\n className=\"collapse-title font-medium flex items-center justify-between cursor-pointer\"\n onClick={handleClick}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-expanded={isOpen}\n aria-disabled={isDisabled}\n >\n <span>{item.label}</span>\n {item.extra && <span className=\"ml-auto mr-6\">{item.extra}</span>}\n </div>\n <div className=\"collapse-content\">\n {item.children}\n </div>\n </div>\n )\n})\n\nCollapsePanel.displayName = 'CollapsePanel'\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n items = [],\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'md',\n icon = 'arrow',\n expandIconPlacement = 'start',\n onChange,\n className = '',\n 'data-testid': testId = 'collapse',\n ...rest\n },\n ref\n ) => {\n // Normalize keys to array\n const normalizeKeys = (keys: string | number | (string | number)[] | undefined): (string | number)[] => {\n if (keys === undefined) return []\n if (Array.isArray(keys)) return keys\n return [keys]\n }\n\n const [internalActiveKeys, setInternalActiveKeys] = useState<(string | number)[]>(\n () => normalizeKeys(defaultActiveKey)\n )\n\n const isControlled = activeKey !== undefined\n const currentActiveKeys = isControlled ? normalizeKeys(activeKey) : internalActiveKeys\n\n const handleToggle = (key: string | number) => {\n let newActiveKeys: (string | number)[]\n\n if (accordion) {\n // In accordion mode, only one can be open\n newActiveKeys = currentActiveKeys.includes(key) ? [] : [key]\n } else {\n // Toggle the key\n if (currentActiveKeys.includes(key)) {\n newActiveKeys = currentActiveKeys.filter((k) => k !== key)\n } else {\n newActiveKeys = [...currentActiveKeys, key]\n }\n }\n\n if (!isControlled) {\n setInternalActiveKeys(newActiveKeys)\n }\n onChange?.(newActiveKeys)\n }\n\n const containerClasses = [\n 'flex flex-col',\n bordered && !ghost && 'divide-y divide-base-300',\n bordered && 'border border-base-300 rounded-lg overflow-hidden',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={containerClasses}\n data-testid={testId}\n {...rest}\n >\n {items.map((item) => (\n <CollapsePanel\n key={item.key}\n item={item}\n isOpen={currentActiveKeys.includes(item.key)}\n onToggle={() => handleToggle(item.key)}\n icon={item.showArrow === false ? 'none' : icon}\n expandIconPlacement={expandIconPlacement}\n bordered={false}\n ghost={ghost}\n size={size}\n testId={testId}\n />\n ))}\n </div>\n )\n }\n)\n\nCollapse.displayName = 'Collapse'\n"],"names":["sizeClasses","CollapsePanel","forwardRef","item","isOpen","onToggle","icon","expandIconPlacement","bordered","ghost","size","testId","ref","isDisabled","panelClasses","handleClick","jsxs","e","jsx","Collapse","items","activeKey","defaultActiveKey","accordion","onChange","className","rest","normalizeKeys","keys","internalActiveKeys","setInternalActiveKeys","useState","isControlled","currentActiveKeys","handleToggle","key","newActiveKeys","k","containerClasses"],"mappings":"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"}
|