@bioturing/components 0.20.0 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/code-block/component.js +12 -12
- package/dist/components/dropdown-menu/component.js +146 -130
- package/dist/components/dropdown-menu/component.js.map +1 -1
- package/dist/components/dropdown-menu/style.css +1 -1
- package/dist/components/form/item.js.map +1 -1
- package/dist/components/hooks/useCharts.js +23 -19
- package/dist/components/hooks/useCharts.js.map +1 -1
- package/dist/components/icon-button/component.js +38 -35
- package/dist/components/icon-button/component.js.map +1 -1
- package/dist/components/nav/group.js +24 -9
- package/dist/components/nav/group.js.map +1 -1
- package/dist/components/nav/item.js +2 -2
- package/dist/components/nav/item.js.map +1 -1
- package/dist/components/nav/style.css +1 -1
- package/dist/components/stack/StackChild.js +31 -34
- package/dist/components/stack/StackChild.js.map +1 -1
- package/dist/components/table/style.css +1 -1
- package/dist/components/utils/WithRenderProp.js +10 -9
- package/dist/components/utils/WithRenderProp.js.map +1 -1
- package/dist/components/utils/constants.js +10 -0
- package/dist/components/utils/constants.js.map +1 -0
- package/dist/index.d.ts +49 -45
- package/dist/index.js +163 -160
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,12 +7,12 @@ import { Highlight as J, themes as K } from "prism-react-renderer";
|
|
|
7
7
|
import './style.css';/* empty css */
|
|
8
8
|
import { WithAntdTokens as Q } from "../utils/WithAntdTokens.js";
|
|
9
9
|
import { Segmented as R } from "../segmented/component.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
10
|
+
import { reactNodeToString as U } from "../utils/reactToString.js";
|
|
11
|
+
import { useControlledState as V } from "../hooks/useControlledState.js";
|
|
12
|
+
import { useCls as X } from "../utils/antdUtils.js";
|
|
13
|
+
import { clsx as Y } from "../utils/cn.js";
|
|
14
|
+
import { IconButton as Z } from "../icon-button/component.js";
|
|
15
|
+
import { ScrollArea as H } from "../scroll-area/component.js";
|
|
16
16
|
const fo = ({
|
|
17
17
|
code: u,
|
|
18
18
|
children: s,
|
|
@@ -29,7 +29,7 @@ const fo = ({
|
|
|
29
29
|
maxHeight: c,
|
|
30
30
|
...O
|
|
31
31
|
}) => {
|
|
32
|
-
const [i, k] =
|
|
32
|
+
const [i, k] = V(
|
|
33
33
|
x,
|
|
34
34
|
T,
|
|
35
35
|
v
|
|
@@ -50,7 +50,7 @@ const fo = ({
|
|
|
50
50
|
k
|
|
51
51
|
]);
|
|
52
52
|
const [L, a] = p(g), [M, b] = p(!1), D = () => {
|
|
53
|
-
const t = l ||
|
|
53
|
+
const t = l || U(s);
|
|
54
54
|
try {
|
|
55
55
|
navigator.clipboard.writeText(t).then(() => {
|
|
56
56
|
a(w), b(!0);
|
|
@@ -60,11 +60,11 @@ const fo = ({
|
|
|
60
60
|
}
|
|
61
61
|
}, E = () => {
|
|
62
62
|
a(g), b(!1);
|
|
63
|
-
}, d =
|
|
63
|
+
}, d = X();
|
|
64
64
|
return /* @__PURE__ */ o(G, { theme: "dark", children: /* @__PURE__ */ _(
|
|
65
65
|
Q,
|
|
66
66
|
{
|
|
67
|
-
className:
|
|
67
|
+
className: Y(d("code-block"), S, e == null ? void 0 : e.root),
|
|
68
68
|
...O,
|
|
69
69
|
children: [
|
|
70
70
|
h && /* @__PURE__ */ o("div", { className: d("code-block-header", e == null ? void 0 : e.header), children: /* @__PURE__ */ o(
|
|
@@ -79,7 +79,7 @@ const fo = ({
|
|
|
79
79
|
}
|
|
80
80
|
) }),
|
|
81
81
|
/* @__PURE__ */ o("div", { className: d("code-block-copy"), children: /* @__PURE__ */ o(
|
|
82
|
-
|
|
82
|
+
Z,
|
|
83
83
|
{
|
|
84
84
|
onClick: D,
|
|
85
85
|
label: L,
|
|
@@ -94,7 +94,7 @@ const fo = ({
|
|
|
94
94
|
style: {
|
|
95
95
|
maxHeight: c && (typeof c == "number" ? `${c}px` : c)
|
|
96
96
|
},
|
|
97
|
-
children: /* @__PURE__ */ o(
|
|
97
|
+
children: /* @__PURE__ */ o(H, { children: l ? /* @__PURE__ */ o(
|
|
98
98
|
J,
|
|
99
99
|
{
|
|
100
100
|
language: A,
|
|
@@ -1,190 +1,206 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { useControlled as
|
|
6
|
-
import {
|
|
2
|
+
import { jsx as e, jsxs as g } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback as M, useRef as j, createElement as q } from "react";
|
|
4
|
+
import { Menu as f } from "@base-ui-components/react/menu";
|
|
5
|
+
import { useControlled as F } from "@base-ui-components/react/utils";
|
|
6
|
+
import { Popover as H } from "@base-ui-components/react/popover";
|
|
7
|
+
import { Command as u } from "../cmdk/index.js";
|
|
8
|
+
import { PopupPanelSize as S } from "../popup-panel/constants.js";
|
|
7
9
|
import './style.css';/* empty css */
|
|
8
|
-
import {
|
|
9
|
-
import { PopupPanelSize as A } from "../popup-panel/constants.js";
|
|
10
|
-
import { useCls as K, useAntdCssVarClassname as Q, parseAntdPlacement as W } from "../utils/antdUtils.js";
|
|
10
|
+
import { useCls as J, useAntdCssVarClassname as K, parseAntdPlacement as Q } from "../utils/antdUtils.js";
|
|
11
11
|
import { Input as X } from "../input/component.js";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
import { ScrollArea as R } from "../scroll-area/component.js";
|
|
13
|
+
import { DROPDOWN_COLLISION_AVOIDANCE as Y } from "../utils/constants.js";
|
|
14
|
+
import { clsx as d } from "../utils/cn.js";
|
|
15
|
+
const lo = ({
|
|
16
|
+
children: V,
|
|
17
|
+
items: _,
|
|
18
|
+
placement: x,
|
|
19
|
+
openOnHover: z,
|
|
20
|
+
open: B,
|
|
21
|
+
onOpenChange: v,
|
|
22
|
+
className: O,
|
|
23
|
+
itemRender: I,
|
|
22
24
|
classNames: r,
|
|
23
|
-
size:
|
|
24
|
-
showSearch:
|
|
25
|
-
searchProps:
|
|
25
|
+
size: C = "auto",
|
|
26
|
+
showSearch: i,
|
|
27
|
+
searchProps: L = {
|
|
26
28
|
placeholder: "Search..."
|
|
27
29
|
}
|
|
28
30
|
}) => {
|
|
29
|
-
const [T,
|
|
30
|
-
controlled:
|
|
31
|
+
const [T, P] = F({
|
|
32
|
+
controlled: B,
|
|
31
33
|
default: !1,
|
|
32
34
|
name: "open"
|
|
33
|
-
}),
|
|
35
|
+
}), m = M(
|
|
34
36
|
(o) => {
|
|
35
|
-
|
|
37
|
+
P(o), v == null || v(o);
|
|
36
38
|
},
|
|
37
|
-
[
|
|
38
|
-
), n =
|
|
39
|
+
[P, v]
|
|
40
|
+
), n = J(), c = K(), k = Q(x), U = j(null), w = _.reduce((o, t) => (o.length === 0 && t.type !== "header" && o.push({
|
|
39
41
|
label: null,
|
|
40
42
|
items: []
|
|
41
|
-
}),
|
|
42
|
-
label:
|
|
43
|
+
}), t.type === "header" ? o.push({
|
|
44
|
+
label: t.title,
|
|
43
45
|
items: []
|
|
44
|
-
}) : (
|
|
45
|
-
(o,
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
46
|
+
}) : (t.type === "item" || t.type === "divider") && o.length > 0 && o[o.length - 1].items.push(t), o), []), G = i ? u.Separator : f.Separator, b = M(
|
|
47
|
+
(o, t, p) => {
|
|
48
|
+
const l = i ? u.Item : f.Item;
|
|
49
|
+
if (o.type === "item") {
|
|
50
|
+
const D = {
|
|
51
|
+
className: d(n("dropdown-menu-item"), r == null ? void 0 : r.item),
|
|
52
|
+
disabled: o.disabled,
|
|
53
|
+
"data-danger": o.danger,
|
|
54
|
+
ref: o.ref,
|
|
55
|
+
onClick: o.onClick,
|
|
56
|
+
onMouseEnter: o.onMouseEnter,
|
|
57
|
+
onMouseLeave: o.onMouseLeave,
|
|
58
|
+
onMouseOver: o.onMouseOver,
|
|
59
|
+
onMouseOut: o.onMouseOut,
|
|
60
|
+
onSelect: i ? () => {
|
|
61
|
+
const y = new MouseEvent("click", {
|
|
62
|
+
bubbles: !0,
|
|
63
|
+
cancelable: !0
|
|
64
|
+
});
|
|
65
|
+
o.onClick(y), m == null || m(!1);
|
|
66
|
+
} : void 0,
|
|
67
|
+
render: I ? (y) => I(o, y) : void 0,
|
|
68
|
+
children: [
|
|
69
|
+
o.icon && /* @__PURE__ */ e(
|
|
70
|
+
"span",
|
|
71
|
+
{
|
|
72
|
+
className: d(
|
|
73
|
+
n("dropdown-menu-item-icon"),
|
|
74
|
+
r == null ? void 0 : r.itemIcon
|
|
75
|
+
),
|
|
76
|
+
children: o.icon
|
|
77
|
+
},
|
|
78
|
+
"icon"
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ e("span", { children: o.label }, "label")
|
|
81
|
+
]
|
|
82
|
+
};
|
|
83
|
+
return i ? /* @__PURE__ */ e(u.Item, { ...D }, t + "-" + p) : /* @__PURE__ */ e(l, { ...D }, t + "-" + p);
|
|
84
|
+
} else if (o.type === "divider")
|
|
85
|
+
return /* @__PURE__ */ e(
|
|
86
|
+
G,
|
|
87
|
+
{
|
|
88
|
+
className: d(
|
|
89
|
+
n("dropdown-menu-divider"),
|
|
90
|
+
r == null ? void 0 : r.separator
|
|
91
|
+
)
|
|
92
|
+
},
|
|
93
|
+
t + "-" + p
|
|
94
|
+
);
|
|
95
|
+
return null;
|
|
96
|
+
},
|
|
97
|
+
[n, r, I, m, i, G]
|
|
98
|
+
), A = M(
|
|
99
|
+
(o, t) => /* @__PURE__ */ g(
|
|
100
|
+
f.Group,
|
|
87
101
|
{
|
|
88
|
-
className:
|
|
102
|
+
className: d(n("dropdown-menu-group"), r == null ? void 0 : r.group),
|
|
89
103
|
children: [
|
|
90
|
-
o.label && /* @__PURE__ */
|
|
91
|
-
|
|
104
|
+
o.label && /* @__PURE__ */ e(
|
|
105
|
+
f.GroupLabel,
|
|
92
106
|
{
|
|
93
|
-
className:
|
|
107
|
+
className: d(
|
|
94
108
|
n("dropdown-menu-header"),
|
|
95
109
|
r == null ? void 0 : r.groupLabel
|
|
96
110
|
),
|
|
97
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ e("span", { children: o.label })
|
|
98
112
|
}
|
|
99
113
|
),
|
|
100
|
-
o.items.map((
|
|
114
|
+
o.items.map((p, l) => b(p, t, l))
|
|
101
115
|
]
|
|
102
116
|
},
|
|
103
|
-
"group" +
|
|
117
|
+
"group" + t
|
|
104
118
|
),
|
|
105
|
-
[n, r,
|
|
106
|
-
),
|
|
107
|
-
(o,
|
|
108
|
-
|
|
119
|
+
[n, r, b]
|
|
120
|
+
), E = M(
|
|
121
|
+
(o, t) => o.label ? /* @__PURE__ */ e(
|
|
122
|
+
u.Group,
|
|
109
123
|
{
|
|
110
|
-
className:
|
|
111
|
-
heading: /* @__PURE__ */
|
|
112
|
-
|
|
124
|
+
className: d(n("dropdown-menu-group"), r == null ? void 0 : r.group),
|
|
125
|
+
heading: /* @__PURE__ */ e(
|
|
126
|
+
f.GroupLabel,
|
|
113
127
|
{
|
|
114
|
-
className:
|
|
128
|
+
className: d(
|
|
115
129
|
n("dropdown-menu-header"),
|
|
116
130
|
r == null ? void 0 : r.groupLabel
|
|
117
131
|
),
|
|
118
|
-
children: /* @__PURE__ */
|
|
132
|
+
children: /* @__PURE__ */ e("span", { children: o.label })
|
|
119
133
|
}
|
|
120
134
|
),
|
|
121
|
-
children: o.items.map((
|
|
135
|
+
children: o.items.map((p, l) => b(p, t, l))
|
|
122
136
|
},
|
|
123
|
-
"group" +
|
|
124
|
-
) : o.items.map((
|
|
125
|
-
[n, r,
|
|
126
|
-
),
|
|
127
|
-
() =>
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
|
|
137
|
+
"group" + t
|
|
138
|
+
) : o.items.map((p, l) => b(p, t, l)),
|
|
139
|
+
[n, r, b]
|
|
140
|
+
), W = M(
|
|
141
|
+
() => i ? /* @__PURE__ */ g(u, { className: n("dropdown-menu-container"), children: [
|
|
142
|
+
/* @__PURE__ */ q(
|
|
143
|
+
u.Input,
|
|
130
144
|
{
|
|
131
|
-
...
|
|
132
|
-
|
|
145
|
+
...L,
|
|
146
|
+
key: "search",
|
|
147
|
+
render: /* @__PURE__ */ e(X, { allowClear: !0, className: n("dropdown-menu-search") })
|
|
133
148
|
}
|
|
134
149
|
),
|
|
135
|
-
/* @__PURE__ */ g(
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
|
|
138
|
-
] })
|
|
139
|
-
] }) :
|
|
150
|
+
/* @__PURE__ */ e(R, { children: /* @__PURE__ */ g(u.List, { className: n("dropdown-menu-list"), children: [
|
|
151
|
+
/* @__PURE__ */ e(u.Empty, { className: n("dropdown-menu-empty"), children: "No results found." }),
|
|
152
|
+
w.map(E)
|
|
153
|
+
] }) })
|
|
154
|
+
] }) : /* @__PURE__ */ e("div", { className: n("dropdown-menu-container"), children: /* @__PURE__ */ e(R, { children: w.map(A) }) }),
|
|
140
155
|
[
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
S,
|
|
156
|
+
i,
|
|
157
|
+
w,
|
|
144
158
|
E,
|
|
145
|
-
|
|
159
|
+
A,
|
|
160
|
+
L,
|
|
146
161
|
n
|
|
147
162
|
]
|
|
148
|
-
),
|
|
163
|
+
), h = i ? H : f;
|
|
149
164
|
return /* @__PURE__ */ g(
|
|
150
|
-
|
|
165
|
+
h.Root,
|
|
151
166
|
{
|
|
152
|
-
openOnHover:
|
|
167
|
+
openOnHover: z,
|
|
153
168
|
open: T,
|
|
154
|
-
onOpenChange:
|
|
169
|
+
onOpenChange: m,
|
|
155
170
|
children: [
|
|
156
|
-
/* @__PURE__ */
|
|
157
|
-
|
|
171
|
+
/* @__PURE__ */ e(
|
|
172
|
+
h.Trigger,
|
|
158
173
|
{
|
|
159
|
-
render:
|
|
160
|
-
ref:
|
|
161
|
-
className:
|
|
174
|
+
render: V,
|
|
175
|
+
ref: U,
|
|
176
|
+
className: d(
|
|
162
177
|
n("dropdown-menu-trigger"),
|
|
163
178
|
r == null ? void 0 : r.trigger,
|
|
164
|
-
|
|
179
|
+
c
|
|
165
180
|
)
|
|
166
181
|
}
|
|
167
182
|
),
|
|
168
|
-
/* @__PURE__ */
|
|
169
|
-
|
|
183
|
+
/* @__PURE__ */ e(h.Portal, { children: /* @__PURE__ */ e(
|
|
184
|
+
h.Positioner,
|
|
170
185
|
{
|
|
171
|
-
side:
|
|
172
|
-
align:
|
|
186
|
+
side: k.placement,
|
|
187
|
+
align: k.align,
|
|
173
188
|
sideOffset: 4,
|
|
174
|
-
className:
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
className: d(n("dropdown-menu-root"), r == null ? void 0 : r.root),
|
|
190
|
+
collisionAvoidance: Y,
|
|
191
|
+
children: /* @__PURE__ */ e(
|
|
192
|
+
h.Popup,
|
|
177
193
|
{
|
|
178
|
-
className:
|
|
194
|
+
className: d(
|
|
179
195
|
n("dropdown-menu"),
|
|
180
|
-
|
|
196
|
+
O,
|
|
181
197
|
r == null ? void 0 : r.popup,
|
|
182
|
-
|
|
198
|
+
c
|
|
183
199
|
),
|
|
184
200
|
style: {
|
|
185
|
-
"--size-width":
|
|
201
|
+
"--size-width": C in S ? S[C] : void 0
|
|
186
202
|
},
|
|
187
|
-
children:
|
|
203
|
+
children: W()
|
|
188
204
|
}
|
|
189
205
|
)
|
|
190
206
|
}
|
|
@@ -194,6 +210,6 @@ const no = ({
|
|
|
194
210
|
);
|
|
195
211
|
};
|
|
196
212
|
export {
|
|
197
|
-
|
|
213
|
+
lo as DropdownMenu
|
|
198
214
|
};
|
|
199
215
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n useCls,\n clsx,\n useAntdCssVarClassname,\n parseAntdPlacement,\n WithRenderPropProps,\n} from \"../utils\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { Ref, useCallback, useRef } from \"react\";\nimport { useControlled } from \"@base-ui-components/react/utils\";\nimport { Command } from \"../cmdk\";\n\n// Import component-specific styles\nimport \"./style.css\";\nimport { Popover } from \"@base-ui-components/react\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { Input } from \"../input\";\n\nexport type DropdownMenuItemType =\n | {\n type: \"item\";\n label?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n key: React.Key;\n onClick?: React.HTMLAttributes<HTMLElement>[\"onClick\"];\n onMouseEnter?: React.HTMLAttributes<HTMLElement>[\"onMouseEnter\"];\n onMouseLeave?: React.HTMLAttributes<HTMLElement>[\"onMouseLeave\"];\n onMouseOver?: React.HTMLAttributes<HTMLElement>[\"onMouseOver\"];\n onMouseOut?: React.HTMLAttributes<HTMLElement>[\"onMouseOut\"];\n danger?: boolean;\n ref?: React.Ref<HTMLElement>;\n }\n | {\n type: \"divider\";\n }\n | {\n type: \"header\";\n title?: React.ReactNode;\n };\n\nexport interface DropdownMenuProps {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n group?: string;\n groupLabel?: string;\n item?: string;\n itemIcon?: string;\n itemText?: string;\n separator?: string;\n positioner?: string;\n };\n /**\n * Custom render function for menu items\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: Omit<\n React.ComponentProps<typeof Command.Input>,\n \"size\" | \"ref\"\n >;\n}\n\ninterface DropdownMenuGroup {\n label: React.ReactNode | null;\n items: DropdownMenuItemType[];\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n searchProps = {\n placeholder: \"Search...\",\n },\n}: DropdownMenuProps) => {\n const [open, setOpen] = useControlled({\n controlled: outsideOpen,\n default: false,\n name: \"open\",\n });\n const onOpenChange = useCallback(\n (newValue: boolean) => {\n setOpen(newValue);\n outsideOnOpenChange?.(newValue);\n },\n [setOpen, outsideOnOpenChange]\n );\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const headlessUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const itemGroups = items.reduce<DropdownMenuGroup[]>((acc, current) => {\n // If no groups exist yet and current item is not a header, create default group\n if (acc.length === 0 && current.type !== \"header\") {\n acc.push({\n label: null,\n items: [],\n });\n }\n\n // If it's a header, create a new group\n if (current.type === \"header\") {\n acc.push({\n label: current.title,\n items: [],\n });\n }\n // If it's an item and we have at least one group, add it to the last group's items\n else if (\n (current.type === \"item\" || current.type === \"divider\") &&\n acc.length > 0\n ) {\n acc[acc.length - 1].items.push(current);\n }\n // Skip dividers\n return acc;\n }, []);\n\n const MenuItem = showSearch ? Command.Item : Menu.Item;\n const MenuSeparator = showSearch ? Command.Separator : Menu.Separator;\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, i: number, j: number) => {\n if (item.type === \"item\") {\n return (\n <MenuItem\n key={i + \"-\" + j}\n className={clsx(cls(\"dropdown-menu-item\"), classNames?.item)}\n disabled={item.disabled}\n data-danger={item.danger}\n ref={item.ref as Ref<HTMLDivElement>}\n onClick={item.onClick}\n onMouseEnter={item.onMouseEnter}\n onMouseLeave={item.onMouseLeave}\n onMouseOver={item.onMouseOver}\n onMouseOut={item.onMouseOut}\n render={\n itemRender\n ? (itemProps) => itemRender(item, itemProps)\n : undefined\n }\n >\n {item.icon && (\n <span\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon\n )}\n >\n {item.icon}\n </span>\n )}\n <span>{item.label}</span>\n </MenuItem>\n );\n } else if (item.type === \"divider\") {\n return (\n <MenuSeparator\n key={i + \"-\" + j}\n className={clsx(\n cls(\"dropdown-menu-divider\"),\n classNames?.separator\n )}\n />\n );\n }\n\n // else if (item.type === \"header\") {\n // return (\n // <Menu.GroupLabel\n // key={i + \"-\" + j}\n // className={clsx(\n // cls(\"dropdown-menu-header\"),\n // classNames?.groupLabel\n // )}\n // >\n // <span>{item.title}</span>\n // </Menu.GroupLabel>\n // );\n // }\n return null;\n },\n [cls, classNames, itemRender, MenuItem, MenuSeparator]\n );\n\n const renderGroup = useCallback(\n (group: DropdownMenuGroup, index: number) => (\n <Menu.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n >\n {group.label && (\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n )}\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Menu.Group>\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderGroupShowSearch = useCallback(\n (group: DropdownMenuGroup, index: number) =>\n group.label ? (\n <Command.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n heading={\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n }\n >\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Command.Group>\n ) : (\n group.items.map((item, j) => renderMenuItem(item, index, j))\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderMenuInner = useCallback(\n () =>\n showSearch ? (\n <Command>\n <Command.Input\n {...searchProps}\n render={\n <Input allowClear className={cls(\"dropdown-menu-search\")} />\n }\n />\n <Command.List>\n <Command.Empty className={cls(\"dropdown-menu-empty\")}>\n No results found.\n </Command.Empty>\n {itemGroups.map(renderGroupShowSearch)}\n </Command.List>\n </Command>\n ) : (\n itemGroups.map(renderGroup)\n ),\n [\n showSearch,\n itemGroups,\n renderGroupShowSearch,\n renderGroup,\n searchProps,\n cls,\n ]\n );\n\n const BaseComponent = showSearch ? Popover : Menu;\n\n return (\n <BaseComponent.Root\n openOnHover={openOnHover}\n open={open}\n onOpenChange={onOpenChange}\n >\n <BaseComponent.Trigger\n render={children}\n ref={buttonRef}\n className={clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n antdCssVarClassname\n )}\n />\n <BaseComponent.Portal>\n <BaseComponent.Positioner\n side={headlessUIPlacement.placement}\n align={headlessUIPlacement.align}\n sideOffset={4}\n className={clsx(cls(\"dropdown-menu-root\"), classNames?.root)}\n >\n <BaseComponent.Popup\n className={clsx(\n cls(\"dropdown-menu\"),\n className,\n classNames?.popup,\n antdCssVarClassname\n )}\n style={\n {\n \"--size-width\":\n size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n } as React.CSSProperties\n }\n >\n {renderMenuInner()}\n </BaseComponent.Popup>\n </BaseComponent.Positioner>\n </BaseComponent.Portal>\n </BaseComponent.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","className","itemRender","classNames","size","showSearch","searchProps","open","setOpen","useControlled","onOpenChange","useCallback","newValue","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","headlessUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","acc","current","MenuItem","Command","Menu","MenuSeparator","renderMenuItem","item","i","j","jsxs","clsx","itemProps","jsx","renderGroup","group","index","renderGroupShowSearch","renderMenuInner","Input","BaseComponent","Popover","PopupPanelSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { useControlled } from \"@base-ui-components/react/utils\";\nimport { Popover } from \"@base-ui-components/react/popover\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { Ref, useCallback, useRef } from \"react\";\nimport {\n clsx,\n DROPDOWN_COLLISION_AVOIDANCE,\n parseAntdPlacement,\n useAntdCssVarClassname,\n useCls,\n} from \"../utils\";\nimport { Command } from \"../cmdk\";\nimport { ScrollArea } from \"../scroll-area\";\n\n// Import component-specific styles\nimport { Input } from \"../input\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\n\nimport \"./style.css\";\n\nexport type DropdownMenuItemType =\n | {\n type: \"item\";\n label?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n key: React.Key;\n onClick?: React.HTMLAttributes<HTMLElement>[\"onClick\"];\n onMouseEnter?: React.HTMLAttributes<HTMLElement>[\"onMouseEnter\"];\n onMouseLeave?: React.HTMLAttributes<HTMLElement>[\"onMouseLeave\"];\n onMouseOver?: React.HTMLAttributes<HTMLElement>[\"onMouseOver\"];\n onMouseOut?: React.HTMLAttributes<HTMLElement>[\"onMouseOut\"];\n danger?: boolean;\n ref?: React.Ref<HTMLElement>;\n }\n | {\n type: \"divider\";\n }\n | {\n type: \"header\";\n title?: React.ReactNode;\n };\n\nexport interface DropdownMenuProps {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n group?: string;\n groupLabel?: string;\n item?: string;\n itemIcon?: string;\n itemText?: string;\n separator?: string;\n positioner?: string;\n };\n /**\n * Custom render function for menu items\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: Omit<\n React.ComponentProps<typeof Command.Input>,\n \"size\" | \"ref\"\n >;\n /**\n *\n */\n}\n\ninterface DropdownMenuGroup {\n label: React.ReactNode | null;\n items: DropdownMenuItemType[];\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n searchProps = {\n placeholder: \"Search...\",\n },\n}: DropdownMenuProps) => {\n const [open, setOpen] = useControlled({\n controlled: outsideOpen,\n default: false,\n name: \"open\",\n });\n const onOpenChange = useCallback(\n (newValue: boolean) => {\n setOpen(newValue);\n outsideOnOpenChange?.(newValue);\n },\n [setOpen, outsideOnOpenChange]\n );\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const headlessUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const itemGroups = items.reduce<DropdownMenuGroup[]>((acc, current) => {\n // If no groups exist yet and current item is not a header, create default group\n if (acc.length === 0 && current.type !== \"header\") {\n acc.push({\n label: null,\n items: [],\n });\n }\n\n // If it's a header, create a new group\n if (current.type === \"header\") {\n acc.push({\n label: current.title,\n items: [],\n });\n }\n // If it's an item and we have at least one group, add it to the last group's items\n else if (\n (current.type === \"item\" || current.type === \"divider\") &&\n acc.length > 0\n ) {\n acc[acc.length - 1].items.push(current);\n }\n // Skip dividers\n return acc;\n }, []);\n\n const MenuSeparator = showSearch ? Command.Separator : Menu.Separator;\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, i: number, j: number) => {\n const MenuItem = showSearch ? Command.Item : Menu.Item;\n\n if (item.type === \"item\") {\n const props = {\n className: clsx(cls(\"dropdown-menu-item\"), classNames?.item),\n disabled: item.disabled,\n \"data-danger\": item.danger,\n ref: item.ref as Ref<HTMLDivElement>,\n onClick: item.onClick,\n onMouseEnter: item.onMouseEnter,\n onMouseLeave: item.onMouseLeave,\n onMouseOver: item.onMouseOver,\n onMouseOut: item.onMouseOut,\n onSelect: showSearch\n ? () => {\n const e = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n }) as unknown as React.MouseEvent<HTMLElement, MouseEvent>;\n item.onClick(e);\n onOpenChange?.(false);\n }\n : undefined,\n render: itemRender\n ? (itemProps: React.HTMLAttributes<HTMLElement>) =>\n itemRender(item, itemProps)\n : undefined,\n children: [\n item.icon && (\n <span\n key=\"icon\"\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon\n )}\n >\n {item.icon}\n </span>\n ),\n <span key=\"label\">{item.label}</span>,\n ],\n };\n return showSearch ? (\n <Command.Item key={i + \"-\" + j} {...props}></Command.Item>\n ) : (\n <MenuItem key={i + \"-\" + j} {...props}></MenuItem>\n );\n } else if (item.type === \"divider\") {\n return (\n <MenuSeparator\n key={i + \"-\" + j}\n className={clsx(\n cls(\"dropdown-menu-divider\"),\n classNames?.separator\n )}\n />\n );\n }\n return null;\n },\n [cls, classNames, itemRender, onOpenChange, showSearch, MenuSeparator]\n );\n\n const renderGroup = useCallback(\n (group: DropdownMenuGroup, index: number) => (\n <Menu.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n >\n {group.label && (\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n )}\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Menu.Group>\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderGroupShowSearch = useCallback(\n (group: DropdownMenuGroup, index: number) =>\n group.label ? (\n <Command.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n heading={\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n }\n >\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Command.Group>\n ) : (\n group.items.map((item, j) => renderMenuItem(item, index, j))\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderMenuInner = useCallback(\n () =>\n showSearch ? (\n <Command className={cls(\"dropdown-menu-container\")}>\n <Command.Input\n {...searchProps}\n key=\"search\"\n render={\n <Input allowClear className={cls(\"dropdown-menu-search\")} />\n }\n />\n <ScrollArea>\n <Command.List className={cls(\"dropdown-menu-list\")}>\n <Command.Empty className={cls(\"dropdown-menu-empty\")}>\n No results found.\n </Command.Empty>\n {itemGroups.map(renderGroupShowSearch)}\n </Command.List>\n </ScrollArea>\n </Command>\n ) : (\n <div className={cls(\"dropdown-menu-container\")}>\n <ScrollArea>{itemGroups.map(renderGroup)}</ScrollArea>\n </div>\n ),\n [\n showSearch,\n itemGroups,\n renderGroupShowSearch,\n renderGroup,\n searchProps,\n cls,\n ]\n );\n\n const BaseComponent = showSearch ? Popover : Menu;\n\n return (\n <BaseComponent.Root\n openOnHover={openOnHover}\n open={open}\n onOpenChange={onOpenChange}\n >\n <BaseComponent.Trigger\n render={children}\n ref={buttonRef}\n className={clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n antdCssVarClassname\n )}\n />\n <BaseComponent.Portal>\n <BaseComponent.Positioner\n side={headlessUIPlacement.placement}\n align={headlessUIPlacement.align}\n sideOffset={4}\n className={clsx(cls(\"dropdown-menu-root\"), classNames?.root)}\n collisionAvoidance={DROPDOWN_COLLISION_AVOIDANCE}\n >\n <BaseComponent.Popup\n className={clsx(\n cls(\"dropdown-menu\"),\n className,\n classNames?.popup,\n antdCssVarClassname\n )}\n style={\n {\n \"--size-width\":\n size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n } as React.CSSProperties\n }\n >\n {renderMenuInner()}\n </BaseComponent.Popup>\n </BaseComponent.Positioner>\n </BaseComponent.Portal>\n </BaseComponent.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","className","itemRender","classNames","size","showSearch","searchProps","open","setOpen","useControlled","onOpenChange","useCallback","newValue","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","headlessUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","acc","current","MenuSeparator","Command","Menu","renderMenuItem","item","i","j","MenuItem","props","clsx","e","itemProps","jsx","renderGroup","group","index","jsxs","renderGroupShowSearch","renderMenuInner","createElement","Input","ScrollArea","BaseComponent","Popover","DROPDOWN_COLLISION_AVOIDANCE","PopupPanelSize"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.ds-dropdown-menu-root{z-index:2000}.ds-dropdown-menu{box-shadow:var(--ds-box-shadow-secondary);border-radius:var(--ds-border-radius);background:var(--ds-color-bg-elevated);list-style:none;padding:.25rem;color:var(--ds-color-text);font-size:var(--ds-font-size);font-family:var(--ds-font-family);transition-property:transform,scale,opacity;transition-duration:.2s;transition-timing-function:var(--ds-motion-ease-out);transform-origin:var(--transform-origin);max-width:min(var(--size-width),var(--available-width))}.ds-dropdown-menu[data-ending-style],.ds-dropdown-menu[data-starting-style]{transform:scale(.9);opacity:0}.ds-dropdown-menu:focus{outline:none}.ds-dropdown-menu-item{padding:.375rem .75rem;border-radius:var(--ds-border-radius-sm);transition:all .3s var(--ds-motion-ease-out);cursor:pointer;display:flex;align-items:center}.ds-dropdown-menu-item:focus{outline:none}.ds-dropdown-menu-item:hover{background:var(--ds-control-item-bg-hover)}.ds-dropdown-menu-item:active,.ds-dropdown-menu-item:focus,.ds-dropdown-menu-item[data-focus=true],.ds-dropdown-menu-item[data-selected=true]{background:var(--ds-control-item-bg-active)}.ds-dropdown-menu-item[data-disabled=true]{pointer-events:none;color:var(--ds-color-text-disabled)}.ds-dropdown-menu-item[data-danger=true]{color:var(--ds-color-error)}.ds-dropdown-menu-item[data-danger=true]:hover{background:var(--ds-color-error-bg)}.ds-dropdown-menu-item[data-danger=true]:active,.ds-dropdown-menu-item[data-danger=true]:focus,.ds-dropdown-menu-item[data-danger=true][data-focus=true]{background:var(--ds-color-error-bg-hover)}.ds-dropdown-menu-search{margin-bottom:.25rem}.ds-dropdown-menu-item-icon{display:flex;align-items:center;justify-content:center;margin-right:.5rem;font-size:1rem;color:var(--ds-color-icon)}[data-danger=true] .ds-dropdown-menu-item-icon{color:var(--ds-color-error)}.ds-dropdown-menu-divider{border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-dropdown-menu-header{font-size:.75rem;font-weight:500;line-height:1rem;text-transform:uppercase;color:var(--ds-color-text-tertiary);padding:.75rem .75rem .25rem}.ds-dropdown-menu-header:first-child{padding-top:.5rem}.ds-dropdown-menu-empty{padding:.375rem .75rem;color:var(--ds-color-text-tertiary)}}
|
|
1
|
+
@layer components{.ds-dropdown-menu-root{z-index:2000}.ds-dropdown-menu{box-shadow:var(--ds-box-shadow-secondary);border-radius:var(--ds-border-radius);background:var(--ds-color-bg-elevated);list-style:none;padding:.25rem;color:var(--ds-color-text);font-size:var(--ds-font-size);font-family:var(--ds-font-family);transition-property:transform,scale,opacity;transition-duration:.2s;transition-timing-function:var(--ds-motion-ease-out);transform-origin:var(--transform-origin);max-width:min(var(--size-width),var(--available-width));max-height:var(--available-height);display:flex;flex-direction:column}.ds-dropdown-menu[data-ending-style],.ds-dropdown-menu[data-starting-style]{transform:scale(.9);opacity:0}.ds-dropdown-menu:focus{outline:none}.ds-dropdown-menu .ds-dropdown-menu-container{flex-shrink:1;min-height:0;display:flex;flex-direction:column}.ds-dropdown-menu .ds-dropdown-menu-search{flex-shrink:0}.ds-dropdown-menu .ds-dropdown-menu-list{flex-shrink:1;min-height:0;display:flex;flex-direction:column}.ds-dropdown-menu-item{padding:.375rem .75rem;border-radius:var(--ds-border-radius-sm);transition:all .3s var(--ds-motion-ease-out);cursor:pointer;display:flex;align-items:center}.ds-dropdown-menu-item:focus{outline:none}.ds-dropdown-menu-item:hover{background:var(--ds-control-item-bg-hover)}.ds-dropdown-menu-item:active,.ds-dropdown-menu-item:focus,.ds-dropdown-menu-item[data-focus=true],.ds-dropdown-menu-item[data-selected=true]{background:var(--ds-control-item-bg-active)}.ds-dropdown-menu-item[data-disabled=true]{pointer-events:none;color:var(--ds-color-text-disabled)}.ds-dropdown-menu-item[data-danger=true]{color:var(--ds-color-error)}.ds-dropdown-menu-item[data-danger=true]:hover{background:var(--ds-color-error-bg)}.ds-dropdown-menu-item[data-danger=true]:active,.ds-dropdown-menu-item[data-danger=true]:focus,.ds-dropdown-menu-item[data-danger=true][data-focus=true]{background:var(--ds-color-error-bg-hover)}.ds-dropdown-menu-search{margin-bottom:.25rem}.ds-dropdown-menu-item-icon{display:flex;align-items:center;justify-content:center;margin-right:.5rem;font-size:1rem;color:var(--ds-color-icon)}[data-danger=true] .ds-dropdown-menu-item-icon{color:var(--ds-color-error)}.ds-dropdown-menu-divider{border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-dropdown-menu-header{font-size:.75rem;font-weight:500;line-height:1rem;text-transform:uppercase;color:var(--ds-color-text-tertiary);padding:.75rem .75rem .25rem}.ds-dropdown-menu-header:first-child{padding-top:.5rem}.ds-dropdown-menu-empty{padding:.375rem .75rem;color:var(--ds-color-text-tertiary)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../src/components/form/item.tsx"],"sourcesContent":["\"use client\";\nimport { isValidElement } from \"react\";\nimport {\n default as AntdFormItem,\n type FormItemProps as AntdFormItemProps,\n} from \"antd/es/form/FormItem\";\nimport { Question } from \"@bioturing/assets\";\nimport { IconButton } from \"../icon-button\";\nimport { useCls } from \"../utils\";\n\nexport interface FormItemProps<Values = unknown>\n extends AntdFormItemProps<Values> {\n // tooltip?: React.ReactNode | TooltipProps;\n optionalMark?: boolean | React.ReactNode;\n}\n\nexport const FormItem = <Values = unknown,>({\n tooltip,\n label,\n optionalMark,\n ...rest\n}: FormItemProps<Values>) => {\n const cls = useCls();\n const renderedLabel =\n tooltip || optionalMark ? (\n <span className={cls(\"form-item-label-inner\")}>\n {label}\n {tooltip && (\n <IconButton\n className={cls(\"form-item-explaination-icon\")}\n label={\n typeof tooltip == \"string\" || isValidElement(tooltip)\n ? tooltip\n : undefined\n }\n >\n <Question />\n </IconButton>\n )}\n {optionalMark && (\n <span className={cls(\"form-item-label-optional-mark\")}>\n {typeof optionalMark == \"boolean\" ? \"(optional)\" : optionalMark}\n </span>\n )}\n </span>\n ) : (\n label\n );\n return <AntdFormItem label={renderedLabel} {...rest} />;\n};\n"],"names":["FormItem","tooltip","label","optionalMark","rest","cls","useCls","renderedLabel","jsxs","jsx","IconButton","isValidElement","Question","AntdFormItem"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"item.js","sources":["../../../src/components/form/item.tsx"],"sourcesContent":["\"use client\";\nimport { isValidElement } from \"react\";\nimport {\n default as AntdFormItem,\n type FormItemProps as AntdFormItemProps,\n} from \"antd/es/form/FormItem\";\nimport { Question } from \"@bioturing/assets\";\nimport { IconButton } from \"../icon-button\";\nimport { useCls } from \"../utils\";\n\nexport interface FormItemProps<Values = unknown>\n extends AntdFormItemProps<Values> {\n // tooltip?: React.ReactNode | TooltipProps;\n /**\n * Whether the field is optional. If true, the label will be marked as optional.\n * @default false\n */\n optionalMark?: boolean | React.ReactNode;\n}\n\nexport const FormItem = <Values = unknown,>({\n tooltip,\n label,\n optionalMark,\n ...rest\n}: FormItemProps<Values>) => {\n const cls = useCls();\n const renderedLabel =\n tooltip || optionalMark ? (\n <span className={cls(\"form-item-label-inner\")}>\n {label}\n {tooltip && (\n <IconButton\n className={cls(\"form-item-explaination-icon\")}\n label={\n typeof tooltip == \"string\" || isValidElement(tooltip)\n ? tooltip\n : undefined\n }\n >\n <Question />\n </IconButton>\n )}\n {optionalMark && (\n <span className={cls(\"form-item-label-optional-mark\")}>\n {typeof optionalMark == \"boolean\" ? \"(optional)\" : optionalMark}\n </span>\n )}\n </span>\n ) : (\n label\n );\n return <AntdFormItem label={renderedLabel} {...rest} />;\n};\n"],"names":["FormItem","tooltip","label","optionalMark","rest","cls","useCls","renderedLabel","jsxs","jsx","IconButton","isValidElement","Question","AntdFormItem"],"mappings":";;;;;;;AAoBO,MAAMA,IAAW,CAAoB;AAAA,EAC1C,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAMC,IAAMC,EAAO,GACbC,IACJN,KAAWE,IACT,gBAAAK,EAAC,UAAK,WAAWH,EAAI,uBAAuB,GACzC,UAAA;AAAA,IAAAH;AAAA,IACAD,KACC,gBAAAQ;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAWL,EAAI,6BAA6B;AAAA,QAC5C,OACE,OAAOJ,KAAW,YAAYU,EAAeV,CAAO,IAChDA,IACA;AAAA,QAGN,4BAACW,GAAS,CAAA,CAAA;AAAA,MAAA;AAAA,IACZ;AAAA,IAEDT,KACE,gBAAAM,EAAA,QAAA,EAAK,WAAWJ,EAAI,+BAA+B,GACjD,UAAO,OAAAF,KAAgB,YAAY,eAAeA,EACrD,CAAA;AAAA,EAAA,EAAA,CAEJ,IAEAD;AAEJ,SAAQ,gBAAAO,EAAAI,GAAA,EAAa,OAAON,GAAgB,GAAGH,GAAM;AACvD;"}
|
|
@@ -1,30 +1,34 @@
|
|
|
1
1
|
import { useDS as c } from "../ds-root/context.js";
|
|
2
2
|
import { getTokensByTheme as C } from "../../tokens/utils.js";
|
|
3
3
|
import { chartColorTokens as h } from "../../tokens/charts/palettes/cloudscape.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { useMemo as m } from "react";
|
|
5
|
+
import { CATEGORICAL_PALETTE_NAMES as L, getCategoricalChartColors as A, SEQUENTIAL_PALETTE_NAMES as f, getSequentialChartColors as p } from "../../tokens/charts/palettes/index.js";
|
|
6
|
+
const I = (t = {
|
|
6
7
|
palette: "cloudscape",
|
|
7
8
|
theme: void 0
|
|
8
9
|
}) => {
|
|
9
|
-
const { theme:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
color:
|
|
22
|
-
|
|
10
|
+
const { theme: i } = c(), e = t.theme || i;
|
|
11
|
+
return m(() => {
|
|
12
|
+
const r = C(h, e), s = r.colorChartsLineAxis, l = r.colorChartsLineGrid, a = r.colorChartsLabelAxis, o = t.palette, n = L.includes(
|
|
13
|
+
o
|
|
14
|
+
) ? A(o, e) : f.includes(o) ? p(o, e) : [];
|
|
15
|
+
return {
|
|
16
|
+
axisLineColor: s,
|
|
17
|
+
splitLineColor: l,
|
|
18
|
+
axisLabelColor: a,
|
|
19
|
+
chartColors: n,
|
|
20
|
+
echartsAxisConfig: {
|
|
21
|
+
axisLine: { lineStyle: { color: s } },
|
|
22
|
+
splitLine: { lineStyle: { color: l } },
|
|
23
|
+
axisLabel: {
|
|
24
|
+
color: a,
|
|
25
|
+
fontFamily: "InterVariable, Inter, Helvetica, Arial, sans-serif"
|
|
26
|
+
}
|
|
23
27
|
}
|
|
24
|
-
}
|
|
25
|
-
};
|
|
28
|
+
};
|
|
29
|
+
}, [e, t.palette]);
|
|
26
30
|
};
|
|
27
31
|
export {
|
|
28
|
-
|
|
32
|
+
I as useCharts
|
|
29
33
|
};
|
|
30
34
|
//# sourceMappingURL=useCharts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCharts.js","sources":["../../../src/components/hooks/useCharts.ts"],"sourcesContent":["import { useDS } from \"../ds-root/context\";\nimport { getTokensByTheme } from \"../../tokens/utils\";\nimport { chartColorTokens } from \"../../tokens/charts/palettes/cloudscape\";\n\nimport {\n SequentialPaletteName,\n CategoricalPaletteName,\n CATEGORICAL_PALETTE_NAMES,\n getCategoricalChartColors,\n getSequentialChartColors,\n SEQUENTIAL_PALETTE_NAMES,\n Theme,\n} from \"../../tokens\";\n\nexport interface UseChartsOptions {\n /**\n * The palette to use for the charts.\n * @default \"cloudscape\"\n */\n palette?: SequentialPaletteName | CategoricalPaletteName;\n /**\n * The theme to use for the charts.\n * @default \"light\"\n */\n theme?: Theme;\n}\n\n/**\n * Get chart colors and axis configuration based on the current theme.\n * @param options\n * @returns\n */\nexport const useCharts = (\n options: UseChartsOptions = {\n palette: \"cloudscape\",\n theme: undefined,\n }\n) => {\n const { theme: themeContext } = useDS();\n const theme = options.theme || themeContext;\n const themedChartColorTokens = getTokensByTheme(chartColorTokens, theme);\n
|
|
1
|
+
{"version":3,"file":"useCharts.js","sources":["../../../src/components/hooks/useCharts.ts"],"sourcesContent":["import { useDS } from \"../ds-root/context\";\nimport { getTokensByTheme } from \"../../tokens/utils\";\nimport { chartColorTokens } from \"../../tokens/charts/palettes/cloudscape\";\n\nimport {\n SequentialPaletteName,\n CategoricalPaletteName,\n CATEGORICAL_PALETTE_NAMES,\n getCategoricalChartColors,\n getSequentialChartColors,\n SEQUENTIAL_PALETTE_NAMES,\n Theme,\n} from \"../../tokens\";\nimport { useMemo } from \"react\";\n\nexport interface UseChartsOptions {\n /**\n * The palette to use for the charts.\n * @default \"cloudscape\"\n */\n palette?: SequentialPaletteName | CategoricalPaletteName;\n /**\n * The theme to use for the charts.\n * @default \"light\"\n */\n theme?: Theme;\n}\n\n/**\n * Get chart colors and axis configuration based on the current theme.\n * @param options\n * @returns\n */\nexport const useCharts = (\n options: UseChartsOptions = {\n palette: \"cloudscape\",\n theme: undefined,\n }\n) => {\n const { theme: themeContext } = useDS();\n const theme = options.theme || themeContext;\n\n const chartInfo = useMemo(() => {\n const themedChartColorTokens = getTokensByTheme(chartColorTokens, theme);\n const axisLineColor = themedChartColorTokens[\"colorChartsLineAxis\"];\n const splitLineColor = themedChartColorTokens[\"colorChartsLineGrid\"];\n const axisLabelColor = themedChartColorTokens[\"colorChartsLabelAxis\"];\n\n const palette = options.palette;\n\n const chartColors = CATEGORICAL_PALETTE_NAMES.includes(\n palette as CategoricalPaletteName\n )\n ? getCategoricalChartColors(palette as CategoricalPaletteName, theme)\n : SEQUENTIAL_PALETTE_NAMES.includes(palette as SequentialPaletteName)\n ? getSequentialChartColors(palette as SequentialPaletteName, theme)\n : [];\n const echartsAxisConfig = {\n axisLine: { lineStyle: { color: axisLineColor } },\n splitLine: { lineStyle: { color: splitLineColor } },\n axisLabel: {\n color: axisLabelColor,\n fontFamily: \"InterVariable, Inter, Helvetica, Arial, sans-serif\",\n },\n };\n return {\n axisLineColor,\n splitLineColor,\n axisLabelColor,\n chartColors,\n echartsAxisConfig,\n };\n }, [theme, options.palette]);\n\n return chartInfo;\n};\n"],"names":["useCharts","options","themeContext","useDS","theme","useMemo","themedChartColorTokens","getTokensByTheme","chartColorTokens","axisLineColor","splitLineColor","axisLabelColor","palette","chartColors","CATEGORICAL_PALETTE_NAMES","getCategoricalChartColors","SEQUENTIAL_PALETTE_NAMES","getSequentialChartColors"],"mappings":";;;;;AAiCa,MAAAA,IAAY,CACvBC,IAA4B;AAAA,EAC1B,SAAS;AAAA,EACT,OAAO;AACT,MACG;AACH,QAAM,EAAE,OAAOC,EAAa,IAAIC,EAAM,GAChCC,IAAQH,EAAQ,SAASC;AAkCxB,SAhCWG,EAAQ,MAAM;AACxB,UAAAC,IAAyBC,EAAiBC,GAAkBJ,CAAK,GACjEK,IAAgBH,EAAuB,qBACvCI,IAAiBJ,EAAuB,qBACxCK,IAAiBL,EAAuB,sBAExCM,IAAUX,EAAQ,SAElBY,IAAcC,EAA0B;AAAA,MAC5CF;AAAA,IAEE,IAAAG,EAA0BH,GAAmCR,CAAK,IAClEY,EAAyB,SAASJ,CAAgC,IAClEK,EAAyBL,GAAkCR,CAAK,IAChE,CAAC;AASE,WAAA;AAAA,MACL,eAAAK;AAAA,MACA,gBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,aAAAE;AAAA,MACA,mBAbwB;AAAA,QACxB,UAAU,EAAE,WAAW,EAAE,OAAOJ,IAAgB;AAAA,QAChD,WAAW,EAAE,WAAW,EAAE,OAAOC,IAAiB;AAAA,QAClD,WAAW;AAAA,UACT,OAAOC;AAAA,UACP,YAAY;AAAA,QAAA;AAAA,MAEhB;AAAA,IAOA;AAAA,EACC,GAAA,CAACP,GAAOH,EAAQ,OAAO,CAAC;AAG7B;"}
|