@bioturing/components 0.42.0 → 0.43.0
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/button/component.d.ts.map +1 -1
- package/dist/components/button/component.js +41 -34
- package/dist/components/button/component.js.map +1 -1
- package/dist/components/button/style.css +1 -1
- package/dist/components/combobox/component.d.ts.map +1 -1
- package/dist/components/combobox/component.js +136 -126
- package/dist/components/combobox/component.js.map +1 -1
- package/dist/components/command-palette/component.d.ts +7 -0
- package/dist/components/command-palette/component.d.ts.map +1 -1
- package/dist/components/command-palette/component.js +35 -33
- package/dist/components/command-palette/component.js.map +1 -1
- package/dist/components/dropdown-menu/component.d.ts +8 -1
- package/dist/components/dropdown-menu/component.d.ts.map +1 -1
- package/dist/components/dropdown-menu/component.js +165 -141
- package/dist/components/dropdown-menu/component.js.map +1 -1
- package/dist/components/dropdown-menu/style.css +1 -1
- package/dist/components/ds-root/component.d.ts +6 -1
- package/dist/components/ds-root/component.d.ts.map +1 -1
- package/dist/components/ds-root/component.js +15 -14
- package/dist/components/ds-root/component.js.map +1 -1
- package/dist/components/form/style.css +1 -1
- package/dist/components/hooks/index.d.ts +0 -1
- package/dist/components/hooks/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/label-with-help/component.d.ts +20 -0
- package/dist/components/label-with-help/component.d.ts.map +1 -0
- package/dist/components/label-with-help/component.js +39 -0
- package/dist/components/label-with-help/component.js.map +1 -0
- package/dist/components/label-with-help/index.d.ts +2 -0
- package/dist/components/label-with-help/index.d.ts.map +1 -0
- package/dist/components/label-with-help/style.css +1 -0
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +157 -133
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/popup-panel/component.d.ts +2 -111
- package/dist/components/popup-panel/component.d.ts.map +1 -1
- package/dist/components/popup-panel/component.js +253 -139
- package/dist/components/popup-panel/component.js.map +1 -1
- package/dist/components/popup-panel/constants.d.ts +1 -0
- package/dist/components/popup-panel/constants.d.ts.map +1 -1
- package/dist/components/popup-panel/constants.js +2 -0
- package/dist/components/popup-panel/constants.js.map +1 -1
- package/dist/components/popup-panel/index.d.ts +1 -0
- package/dist/components/popup-panel/index.d.ts.map +1 -1
- package/dist/components/popup-panel/types.d.ts +124 -0
- package/dist/components/popup-panel/types.d.ts.map +1 -0
- package/dist/components/popup-panel/utils.d.ts +1 -1
- package/dist/components/popup-panel/utils.d.ts.map +1 -1
- package/dist/components/popup-panel/utils.js +5 -5
- package/dist/components/popup-panel/utils.js.map +1 -1
- package/dist/components/resizable/component.d.ts.map +1 -1
- package/dist/components/resizable/component.js +28 -28
- package/dist/components/resizable/component.js.map +1 -1
- package/dist/components/select/component.d.ts.map +1 -1
- package/dist/components/select/component.js +130 -120
- package/dist/components/select/component.js.map +1 -1
- package/dist/components/toast/component.d.ts +2 -2
- package/dist/components/toast/component.d.ts.map +1 -1
- package/dist/components/toast/component.js +14 -20
- package/dist/components/toast/component.js.map +1 -1
- package/dist/components/toast/function.d.ts +7 -8
- package/dist/components/toast/function.d.ts.map +1 -1
- package/dist/components/toast/function.js.map +1 -1
- package/dist/components/toast/style.css +1 -1
- package/dist/components/toast/types.d.ts +4 -0
- package/dist/components/toast/types.d.ts.map +1 -1
- package/dist/components/utils/placement.d.ts +9 -2
- package/dist/components/utils/placement.d.ts.map +1 -1
- package/dist/components/utils/placement.js +29 -18
- package/dist/components/utils/placement.js.map +1 -1
- package/dist/components/utils/reactElement.d.ts +2 -0
- package/dist/components/utils/reactElement.d.ts.map +1 -1
- package/dist/components/utils/reactElement.js +10 -2
- package/dist/components/utils/reactElement.js.map +1 -1
- package/dist/components/utils/renderProp.d.ts.map +1 -1
- package/dist/components/utils/renderProp.js +9 -8
- package/dist/components/utils/renderProp.js.map +1 -1
- package/dist/index.js +191 -189
- package/dist/metadata.d.ts +8 -0
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +15 -0
- package/dist/metadata.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +2 -2
- package/dist/components/hooks/useBaseUIPlacement.d.ts +0 -64
- package/dist/components/hooks/useBaseUIPlacement.d.ts.map +0 -1
- package/dist/components/hooks/useBaseUIPlacement.js +0 -61
- package/dist/components/hooks/useBaseUIPlacement.js.map +0 -1
|
@@ -1,62 +1,74 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as t, Fragment as y, jsxs as
|
|
3
|
-
import { CaretDown as
|
|
4
|
-
import { useFloatingPortalNode as
|
|
5
|
-
import
|
|
2
|
+
import { jsx as t, Fragment as y, jsxs as G } from "react/jsx-runtime";
|
|
3
|
+
import { CaretDown as de } from "@bioturing/assets";
|
|
4
|
+
import { useFloatingPortalNode as fe, offset as ge, autoPlacement as he, shift as be, size as ye, useFloating as Ae, autoUpdate as Ce, FloatingOverlay as Re } from "@floating-ui/react";
|
|
5
|
+
import V from "antd/es/checkbox";
|
|
6
6
|
import R from "antd/es/select";
|
|
7
|
-
import { toMerged as
|
|
8
|
-
import { forwardRef as
|
|
9
|
-
import { useStableCallback as
|
|
10
|
-
import { PopupPanelSize as
|
|
11
|
-
import { Divider as
|
|
12
|
-
import { SelectItem as
|
|
7
|
+
import { toMerged as ke } from "es-toolkit";
|
|
8
|
+
import { forwardRef as xe, useCallback as n, useMemo as T } from "react";
|
|
9
|
+
import { useStableCallback as A } from "@base-ui/utils/useStableCallback";
|
|
10
|
+
import { PopupPanelSize as U } from "../popup-panel/constants.js";
|
|
11
|
+
import { Divider as ve } from "antd";
|
|
12
|
+
import { SelectItem as we } from "./item.js";
|
|
13
13
|
import './style.css';/* empty css */
|
|
14
|
-
import { useValueAsRef as
|
|
15
|
-
import { useControlledState as
|
|
16
|
-
import { useCls as
|
|
17
|
-
import { clsx as
|
|
14
|
+
import { useValueAsRef as C } from "@base-ui/utils/useValueAsRef";
|
|
15
|
+
import { useControlledState as W } from "../hooks/useControlledState.js";
|
|
16
|
+
import { useCls as Me } from "../utils/antdUtils.js";
|
|
17
|
+
import { clsx as $ } from "../utils/cn.js";
|
|
18
18
|
const Oe = ({
|
|
19
19
|
mode: f,
|
|
20
|
-
className:
|
|
21
|
-
open:
|
|
22
|
-
defaultOpen:
|
|
23
|
-
onOpenChange:
|
|
24
|
-
popupClassName:
|
|
25
|
-
onDropdownVisibleChange:
|
|
26
|
-
enhancePositioner:
|
|
27
|
-
getPopupContainer:
|
|
20
|
+
className: q,
|
|
21
|
+
open: B,
|
|
22
|
+
defaultOpen: H,
|
|
23
|
+
onOpenChange: J,
|
|
24
|
+
popupClassName: K,
|
|
25
|
+
onDropdownVisibleChange: L,
|
|
26
|
+
enhancePositioner: s,
|
|
27
|
+
getPopupContainer: Q,
|
|
28
28
|
popupSize: l,
|
|
29
|
-
popupRender:
|
|
30
|
-
dropdownRender:
|
|
29
|
+
popupRender: X,
|
|
30
|
+
dropdownRender: Y,
|
|
31
31
|
classNames: k,
|
|
32
32
|
styles: x = {},
|
|
33
33
|
showSelectionSummary: v,
|
|
34
|
-
selectionSummaryRender:
|
|
35
|
-
value:
|
|
36
|
-
onChange:
|
|
37
|
-
defaultValue:
|
|
38
|
-
showSelectAll:
|
|
39
|
-
selectAllRender:
|
|
40
|
-
options:
|
|
41
|
-
...
|
|
34
|
+
selectionSummaryRender: w,
|
|
35
|
+
value: Z,
|
|
36
|
+
onChange: _,
|
|
37
|
+
defaultValue: z,
|
|
38
|
+
showSelectAll: M,
|
|
39
|
+
selectAllRender: ee,
|
|
40
|
+
options: c,
|
|
41
|
+
...te
|
|
42
42
|
}, a) => {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
), m =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
), h =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
const oe = fe({}), p = f === "multiple" || f === "tags", [O, S] = W(
|
|
44
|
+
B,
|
|
45
|
+
J || L,
|
|
46
|
+
H
|
|
47
|
+
), m = Me(), [o, g] = W(
|
|
48
|
+
Z,
|
|
49
|
+
_,
|
|
50
|
+
z
|
|
51
|
+
), h = C(X), b = C(Y), P = C(ee), N = n(
|
|
52
|
+
({
|
|
53
|
+
availableHeight: e,
|
|
54
|
+
availableWidth: r,
|
|
55
|
+
elements: i
|
|
56
|
+
}) => {
|
|
57
|
+
i.floating.style.setProperty(
|
|
58
|
+
"--available-width",
|
|
59
|
+
r + "px"
|
|
60
|
+
), i.floating.style.setProperty(
|
|
61
|
+
"--available-height",
|
|
62
|
+
e + "px"
|
|
63
|
+
);
|
|
64
|
+
},
|
|
65
|
+
[]
|
|
66
|
+
), re = T(
|
|
67
|
+
() => [
|
|
68
|
+
ge({
|
|
57
69
|
mainAxis: 4
|
|
58
70
|
}),
|
|
59
|
-
|
|
71
|
+
he({
|
|
60
72
|
allowedPlacements: [
|
|
61
73
|
"bottom-start",
|
|
62
74
|
"bottom-end",
|
|
@@ -66,63 +78,61 @@ const Oe = ({
|
|
|
66
78
|
"top"
|
|
67
79
|
]
|
|
68
80
|
}),
|
|
69
|
-
|
|
81
|
+
be({
|
|
70
82
|
padding: 8
|
|
71
83
|
}),
|
|
72
|
-
|
|
84
|
+
ye({
|
|
73
85
|
padding: 8,
|
|
74
|
-
apply
|
|
75
|
-
i.floating.style.setProperty(
|
|
76
|
-
"--available-width",
|
|
77
|
-
o + "px"
|
|
78
|
-
), i.floating.style.setProperty(
|
|
79
|
-
"--available-height",
|
|
80
|
-
e + "px"
|
|
81
|
-
);
|
|
82
|
-
}
|
|
86
|
+
apply: N
|
|
83
87
|
})
|
|
84
88
|
],
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
[N]
|
|
90
|
+
), { floatingStyles: le, refs: u } = Ae({
|
|
91
|
+
placement: "bottom-start",
|
|
92
|
+
transform: !1,
|
|
93
|
+
open: s && O,
|
|
94
|
+
middleware: re,
|
|
95
|
+
whileElementsMounted: Ce
|
|
96
|
+
}), ne = n(
|
|
87
97
|
(e) => {
|
|
88
|
-
const
|
|
89
|
-
return p ?
|
|
98
|
+
const r = Array.isArray(e) ? e.length : 1;
|
|
99
|
+
return p ? r + ` ${r == 1 ? "item" : "items"} selected` : /* @__PURE__ */ t(y, { children: e });
|
|
90
100
|
},
|
|
91
101
|
[p]
|
|
92
|
-
),
|
|
93
|
-
() => Array.isArray(
|
|
94
|
-
[
|
|
95
|
-
),
|
|
96
|
-
g(
|
|
97
|
-
}),
|
|
102
|
+
), se = T(
|
|
103
|
+
() => Array.isArray(c) ? c.map((e) => e.value) : [],
|
|
104
|
+
[c]
|
|
105
|
+
), D = A(() => {
|
|
106
|
+
g(se);
|
|
107
|
+
}), F = A(() => {
|
|
98
108
|
g([]);
|
|
99
|
-
}),
|
|
109
|
+
}), I = A(() => {
|
|
100
110
|
S(!1);
|
|
101
|
-
}),
|
|
111
|
+
}), j = n(
|
|
102
112
|
(e) => {
|
|
103
113
|
if (!e) return;
|
|
104
|
-
const
|
|
105
|
-
u.setFloating(
|
|
114
|
+
const r = e.closest(".ds-select-dropdown");
|
|
115
|
+
u.setFloating(r);
|
|
106
116
|
},
|
|
107
117
|
[u]
|
|
108
|
-
),
|
|
118
|
+
), ce = $(
|
|
109
119
|
m("select", v && "select-selection-summary"),
|
|
110
|
-
|
|
111
|
-
),
|
|
120
|
+
q
|
|
121
|
+
), ae = $(
|
|
112
122
|
m(
|
|
113
123
|
"select-popup",
|
|
114
124
|
p && "select-multiple",
|
|
115
|
-
|
|
125
|
+
s && "select-popup-enhanced"
|
|
116
126
|
),
|
|
117
|
-
k?.popup?.root ||
|
|
118
|
-
),
|
|
127
|
+
k?.popup?.root || K
|
|
128
|
+
), ie = l && typeof l == "string" && l in U ? U[l] : typeof l == "number" ? l + "px" : l || "fit-content", d = n(
|
|
119
129
|
(e) => {
|
|
120
|
-
const
|
|
121
|
-
if (!
|
|
122
|
-
const i = Array.isArray(
|
|
123
|
-
return /* @__PURE__ */
|
|
130
|
+
const r = h.current ? h.current(e) : b.current ? b.current(e) : e;
|
|
131
|
+
if (!M) return r;
|
|
132
|
+
const i = Array.isArray(o) && o.length > 0, ue = Array.isArray(o) && o.length && o.length < c.length;
|
|
133
|
+
return /* @__PURE__ */ G(y, { children: [
|
|
124
134
|
/* @__PURE__ */ t(
|
|
125
|
-
|
|
135
|
+
we,
|
|
126
136
|
{
|
|
127
137
|
className: m(
|
|
128
138
|
"select-item",
|
|
@@ -130,90 +140,90 @@ const Oe = ({
|
|
|
130
140
|
i && "select-item-option-selected",
|
|
131
141
|
"select-item-option-active"
|
|
132
142
|
),
|
|
133
|
-
onMouseOver: (
|
|
143
|
+
onMouseOver: (Pe) => {
|
|
134
144
|
},
|
|
135
145
|
selectAllRender: P.current,
|
|
136
146
|
checked: i,
|
|
137
|
-
indeterminate:
|
|
138
|
-
onSelectAll:
|
|
139
|
-
onDeselectAll:
|
|
147
|
+
indeterminate: ue,
|
|
148
|
+
onSelectAll: D,
|
|
149
|
+
onDeselectAll: F
|
|
140
150
|
}
|
|
141
151
|
),
|
|
142
|
-
/* @__PURE__ */ t(
|
|
143
|
-
|
|
152
|
+
/* @__PURE__ */ t(ve, {}),
|
|
153
|
+
r
|
|
144
154
|
] });
|
|
145
155
|
},
|
|
146
156
|
[
|
|
147
157
|
h,
|
|
148
158
|
b,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
159
|
+
M,
|
|
160
|
+
o,
|
|
161
|
+
c,
|
|
152
162
|
m,
|
|
153
163
|
P,
|
|
154
|
-
|
|
155
|
-
|
|
164
|
+
D,
|
|
165
|
+
F
|
|
156
166
|
]
|
|
157
|
-
),
|
|
167
|
+
), pe = n(
|
|
158
168
|
(e) => {
|
|
159
169
|
a && (typeof a == "function" ? a(e) : a.current = e), e && u.setReference(e?.nativeElement);
|
|
160
170
|
},
|
|
161
171
|
[a, u]
|
|
162
|
-
),
|
|
163
|
-
(e) => /* @__PURE__ */
|
|
164
|
-
/* @__PURE__ */ t(
|
|
165
|
-
/* @__PURE__ */ t("div", { ref:
|
|
172
|
+
), E = n(
|
|
173
|
+
(e) => /* @__PURE__ */ G(y, { children: [
|
|
174
|
+
/* @__PURE__ */ t(Re, { lockScroll: !0, onClick: I }),
|
|
175
|
+
/* @__PURE__ */ t("div", { ref: j, children: d(e) })
|
|
166
176
|
] }),
|
|
167
|
-
[
|
|
168
|
-
),
|
|
169
|
-
(e) =>
|
|
170
|
-
[
|
|
177
|
+
[I, j, d]
|
|
178
|
+
), me = n(
|
|
179
|
+
(e) => s ? E(e) : d(e),
|
|
180
|
+
[s, d, E]
|
|
171
181
|
);
|
|
172
182
|
return /* @__PURE__ */ t(
|
|
173
183
|
R,
|
|
174
184
|
{
|
|
175
|
-
ref:
|
|
176
|
-
suffixIcon: /* @__PURE__ */ t(
|
|
177
|
-
open:
|
|
185
|
+
ref: pe,
|
|
186
|
+
suffixIcon: /* @__PURE__ */ t(de, { weight: "bold" }),
|
|
187
|
+
open: O,
|
|
178
188
|
onOpenChange: S,
|
|
179
|
-
value:
|
|
189
|
+
value: o,
|
|
180
190
|
onChange: g,
|
|
181
191
|
classNames: {
|
|
182
192
|
popup: {
|
|
183
|
-
root:
|
|
193
|
+
root: ae
|
|
184
194
|
},
|
|
185
195
|
...k
|
|
186
196
|
},
|
|
187
197
|
...p ? {
|
|
188
|
-
menuItemSelectedIcon: ({ isSelected: e }) => /* @__PURE__ */ t("span", { className: "ant-select-checkbox-indicator", children: e ? /* @__PURE__ */ t(
|
|
198
|
+
menuItemSelectedIcon: ({ isSelected: e }) => /* @__PURE__ */ t("span", { className: "ant-select-checkbox-indicator", children: e ? /* @__PURE__ */ t(V, { checked: !0 }) : /* @__PURE__ */ t(V, { checked: !1 }) })
|
|
189
199
|
} : {},
|
|
190
200
|
mode: f,
|
|
191
|
-
className:
|
|
192
|
-
styles:
|
|
201
|
+
className: ce,
|
|
202
|
+
styles: s ? ke(x, {
|
|
193
203
|
popup: {
|
|
194
204
|
root: {
|
|
195
205
|
transition: "none",
|
|
196
|
-
...
|
|
197
|
-
"--ds-select-popup-width":
|
|
206
|
+
...le,
|
|
207
|
+
"--ds-select-popup-width": ie
|
|
198
208
|
}
|
|
199
209
|
}
|
|
200
210
|
}) : x,
|
|
201
|
-
getPopupContainer:
|
|
202
|
-
popupRender:
|
|
203
|
-
options:
|
|
211
|
+
getPopupContainer: Q || (s ? () => oe || document.body : void 0),
|
|
212
|
+
popupRender: me,
|
|
213
|
+
options: c,
|
|
204
214
|
...v ? {
|
|
205
215
|
maxTagCount: 1,
|
|
206
216
|
showSearch: !1,
|
|
207
|
-
labelRender: () =>
|
|
217
|
+
labelRender: () => w ? w(o) : ne(o)
|
|
208
218
|
} : {},
|
|
209
|
-
...
|
|
219
|
+
...te
|
|
210
220
|
}
|
|
211
221
|
);
|
|
212
|
-
},
|
|
222
|
+
}, Se = xe(Oe), Ke = Object.assign(Se, {
|
|
213
223
|
Option: R.Option,
|
|
214
224
|
OptGroup: R.OptGroup
|
|
215
225
|
});
|
|
216
226
|
export {
|
|
217
|
-
|
|
227
|
+
Ke as Select
|
|
218
228
|
};
|
|
219
229
|
//# sourceMappingURL=component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/select/component.tsx"],"sourcesContent":["\"use client\";\nimport { CaretDown } from \"@bioturing/assets\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingOverlay,\n offset,\n shift,\n size,\n useFloating,\n useFloatingPortalNode,\n} from \"@floating-ui/react\";\nimport { default as Checkbox } from \"antd/es/checkbox\";\nimport {\n default as AntSelect,\n type SelectProps as AntSelectProps,\n type BaseOptionType,\n type DefaultOptionType,\n} from \"antd/es/select\";\nimport { toMerged } from \"es-toolkit\";\nimport React, { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { clsx, useCls } from \"../utils\";\n\n// Import component-specific styles\nimport { Divider } from \"antd\";\nimport { CheckboxProps } from \"../checkbox\";\nimport { SelectItem } from \"./item\";\nimport \"./style.css\";\nimport { BaseSelectRef } from \"rc-select\";\nimport { useValueAsRef } from \"@base-ui/utils/useValueAsRef\";\n// SelectItem component props\n\n// Define props interface extending Ant Design's SelectProps\nexport interface SelectProps<\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n> extends AntSelectProps<ValueType, OptionType> {\n /**\n * Whether to enhance the positioner using floating-ui\n * @default false\n */\n enhancePositioner?: boolean;\n /**\n * Size of the popup panel\n * Will be ignored if enhancePositioner is false\n */\n popupSize?: string | number | PopupPanelSize;\n /**\n * Show selection summary instead of tags in multiple case\n * @default false\n */\n showSelectionSummary?: boolean;\n /**\n * Render function for the selection summary in multiple case\n * @default (value) => `${value.length} items selected`\n */\n selectionSummaryRender?: (value: ValueType) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onClick: () => void;\n checked: CheckboxProps[\"checked\"];\n indeterminate: CheckboxProps[\"indeterminate\"];\n }) => React.ReactNode;\n}\n\nexport type {\n BaseOptionType as SelectBaseOptionType,\n DefaultOptionType as SelectDefaultOptionType,\n};\n\n// Create inner function\nconst MainSelectInner = <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n {\n mode,\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n popupClassName,\n onDropdownVisibleChange,\n enhancePositioner,\n getPopupContainer,\n popupSize,\n popupRender,\n dropdownRender,\n classNames,\n styles = {},\n showSelectionSummary,\n selectionSummaryRender,\n value: valueProp,\n onChange: onChangeProp,\n defaultValue,\n showSelectAll,\n selectAllRender,\n options,\n ...rest\n }: SelectProps<ValueType, OptionType>,\n ref: React.Ref<React.ComponentRef<typeof AntSelect>>\n) => {\n const portalNode = useFloatingPortalNode({});\n const isMultiple = mode === \"multiple\" || mode === \"tags\";\n const [open, setOpen] = useControlledState(\n openProp,\n onOpenChange || onDropdownVisibleChange,\n defaultOpen\n );\n const cls = useCls();\n const [value, onChange] = useControlledState(\n valueProp,\n onChangeProp,\n defaultValue\n );\n\n // Stabilize render callback props used in useCallback dependencies\n const stablePopupRender = useValueAsRef(popupRender);\n const stableDropdownRender = useValueAsRef(dropdownRender);\n const stableSelectAllRender = useValueAsRef(selectAllRender);\n\n // enhancePositioner\n const { floatingStyles, refs } = useFloating({\n placement: \"bottom-start\",\n transform: false,\n open: enhancePositioner && open,\n middleware: [\n offset({\n mainAxis: 4,\n }),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"bottom\",\n \"top-start\",\n \"top-end\",\n \"top\",\n ],\n }),\n shift({\n padding: 8,\n }),\n size({\n padding: 8,\n apply({ availableHeight, availableWidth, elements }) {\n // 2. Or, use a CSS variable:\n elements.floating.style.setProperty(\n \"--available-width\",\n availableWidth + \"px\"\n );\n elements.floating.style.setProperty(\n \"--available-height\",\n availableHeight + \"px\"\n );\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const defaultSelectionSummaryRender = useCallback(\n (v: ValueType) => {\n const count = Array.isArray(v) ? v.length : 1;\n if (isMultiple) {\n return count + ` ${count == 1 ? \"item\" : \"items\"} selected`;\n }\n return <>{v}</>;\n },\n [isMultiple]\n );\n\n // Memoize allValues calculation\n const allValues = useMemo(\n () => (Array.isArray(options) ? options.map((option) => option.value) : []),\n [options]\n );\n\n // Create stable callbacks for select all/deselect all\n const handleSelectAll = useStableCallback(() => {\n onChange(allValues as ValueType);\n });\n\n const handleDeselectAll = useStableCallback(() => {\n onChange([] as ValueType);\n });\n\n // Create stable callback for overlay click\n const handleOverlayClick = useStableCallback(() => {\n setOpen(false);\n });\n\n // Memoize floating ref callback\n const floatingRefCallback = useCallback(\n (node: HTMLElement | null) => {\n if (!node) return;\n const popupEl = node.closest(\".ds-select-dropdown\") as HTMLDivElement;\n refs.setFloating(popupEl);\n },\n [refs]\n );\n\n const dsSelectClassname = clsx(\n cls(\"select\", showSelectionSummary && \"select-selection-summary\"),\n className\n );\n\n const dsPopupClassName = clsx(\n cls(\n \"select-popup\",\n isMultiple && \"select-multiple\",\n enhancePositioner && \"select-popup-enhanced\"\n ),\n classNames?.popup?.root || popupClassName\n );\n const popupWidth =\n popupSize && typeof popupSize === \"string\" && popupSize in PopupPanelSize\n ? PopupPanelSize[popupSize as keyof typeof PopupPanelSize]\n : typeof popupSize === \"number\"\n ? popupSize + \"px\"\n : popupSize || \"fit-content\";\n const customRenderMenu = useCallback(\n (menu: React.ReactElement) => {\n const renderedMenu = stablePopupRender.current\n ? stablePopupRender.current(menu)\n : stableDropdownRender.current\n ? stableDropdownRender.current(menu)\n : menu;\n if (!showSelectAll) return renderedMenu;\n const checked = Array.isArray(value) && value.length > 0;\n const indeterminate =\n Array.isArray(value) && value.length && value.length < options.length;\n return (\n <>\n <SelectItem\n className={cls(\n \"select-item\",\n \"select-item-option\",\n checked && \"select-item-option-selected\",\n \"select-item-option-active\"\n )}\n onMouseOver={(e) => {}}\n selectAllRender={stableSelectAllRender.current}\n checked={checked}\n indeterminate={indeterminate}\n onSelectAll={handleSelectAll}\n onDeselectAll={handleDeselectAll}\n />\n <Divider />\n {renderedMenu}\n </>\n );\n },\n [\n stablePopupRender,\n stableDropdownRender,\n showSelectAll,\n value,\n options,\n cls,\n stableSelectAllRender,\n handleSelectAll,\n handleDeselectAll,\n ]\n );\n\n const refCallback = useCallback(\n (node: BaseSelectRef) => {\n if (ref) {\n if (typeof ref == \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n if (!node) return;\n refs.setReference(node?.nativeElement as HTMLElement);\n },\n [ref, refs]\n );\n\n // Memoize enhanced popup render for enhancePositioner mode\n const enhancedPopupRender = useCallback(\n (menu: React.ReactElement) => {\n return (\n <>\n <FloatingOverlay lockScroll onClick={handleOverlayClick} />\n <div ref={floatingRefCallback}>{customRenderMenu(menu)}</div>\n </>\n );\n },\n [handleOverlayClick, floatingRefCallback, customRenderMenu]\n );\n\n // Memoize final popup render\n const finalPopupRender = useCallback(\n (menu: React.ReactElement) => {\n if (!enhancePositioner) {\n return customRenderMenu(menu);\n }\n return enhancedPopupRender(menu);\n },\n [enhancePositioner, customRenderMenu, enhancedPopupRender]\n );\n\n return (\n <AntSelect\n // ref={ref}\n ref={refCallback}\n suffixIcon={<CaretDown weight=\"bold\" />}\n open={open}\n onOpenChange={setOpen}\n value={value}\n onChange={onChange}\n // for old version\n // popupClassName={dsPopupClassName}\n classNames={{\n popup: {\n root: dsPopupClassName,\n },\n ...classNames,\n }}\n {...(isMultiple\n ? {\n menuItemSelectedIcon: ({ isSelected }) => (\n <span className=\"ant-select-checkbox-indicator\">\n {isSelected ? (\n <Checkbox checked />\n ) : (\n <Checkbox checked={false} />\n )}\n </span>\n ),\n }\n : {})}\n mode={mode}\n className={dsSelectClassname}\n styles={\n enhancePositioner\n ? toMerged(styles, {\n popup: {\n root: {\n transition: \"none\",\n ...floatingStyles,\n \"--ds-select-popup-width\": popupWidth,\n } as CSSProperties,\n },\n })\n : styles\n }\n getPopupContainer={\n getPopupContainer ||\n (enhancePositioner ? () => portalNode || document.body : undefined)\n }\n popupRender={finalPopupRender}\n options={options}\n {...(showSelectionSummary\n ? {\n maxTagCount: 1,\n showSearch: false,\n labelRender: () => {\n if (selectionSummaryRender) {\n return selectionSummaryRender(value);\n }\n return defaultSelectionSummaryRender(value);\n },\n }\n : {})}\n {...rest}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainSelect = forwardRef(MainSelectInner) as <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n props: SelectProps<ValueType, OptionType> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntSelect>>;\n }\n) => ReturnType<typeof MainSelectInner>;\n\nexport const Select = Object.assign(MainSelect, {\n Option: AntSelect.Option,\n OptGroup: AntSelect.OptGroup,\n});\n"],"names":["MainSelectInner","mode","className","openProp","defaultOpen","onOpenChange","popupClassName","onDropdownVisibleChange","enhancePositioner","getPopupContainer","popupSize","popupRender","dropdownRender","classNames","styles","showSelectionSummary","selectionSummaryRender","valueProp","onChangeProp","defaultValue","showSelectAll","selectAllRender","options","rest","ref","portalNode","useFloatingPortalNode","isMultiple","open","setOpen","useControlledState","cls","useCls","value","onChange","stablePopupRender","useValueAsRef","stableDropdownRender","stableSelectAllRender","floatingStyles","refs","useFloating","offset","autoPlacement","shift","size","availableHeight","availableWidth","elements","autoUpdate","defaultSelectionSummaryRender","useCallback","v","count","allValues","useMemo","option","handleSelectAll","useStableCallback","handleDeselectAll","handleOverlayClick","floatingRefCallback","node","popupEl","dsSelectClassname","clsx","dsPopupClassName","popupWidth","PopupPanelSize","customRenderMenu","menu","renderedMenu","checked","indeterminate","jsxs","Fragment","jsx","SelectItem","e","Divider","refCallback","enhancedPopupRender","FloatingOverlay","finalPopupRender","AntSelect","CaretDown","isSelected","Checkbox","toMerged","MainSelect","forwardRef","Select"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/select/component.tsx"],"sourcesContent":["\"use client\";\nimport { CaretDown } from \"@bioturing/assets\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingOverlay,\n offset,\n shift,\n size,\n useFloating,\n useFloatingPortalNode,\n type MiddlewareState,\n} from \"@floating-ui/react\";\nimport { default as Checkbox } from \"antd/es/checkbox\";\nimport {\n default as AntSelect,\n type SelectProps as AntSelectProps,\n type BaseOptionType,\n type DefaultOptionType,\n} from \"antd/es/select\";\nimport { toMerged } from \"es-toolkit\";\nimport React, { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { clsx, useCls } from \"../utils\";\n\n// Import component-specific styles\nimport { Divider } from \"antd\";\nimport { CheckboxProps } from \"../checkbox\";\nimport { SelectItem } from \"./item\";\nimport \"./style.css\";\nimport { BaseSelectRef } from \"rc-select\";\nimport { useValueAsRef } from \"@base-ui/utils/useValueAsRef\";\n// SelectItem component props\n\n// Define props interface extending Ant Design's SelectProps\nexport interface SelectProps<\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n> extends AntSelectProps<ValueType, OptionType> {\n /**\n * Whether to enhance the positioner using floating-ui\n * @default false\n */\n enhancePositioner?: boolean;\n /**\n * Size of the popup panel\n * Will be ignored if enhancePositioner is false\n */\n popupSize?: string | number | PopupPanelSize;\n /**\n * Show selection summary instead of tags in multiple case\n * @default false\n */\n showSelectionSummary?: boolean;\n /**\n * Render function for the selection summary in multiple case\n * @default (value) => `${value.length} items selected`\n */\n selectionSummaryRender?: (value: ValueType) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onClick: () => void;\n checked: CheckboxProps[\"checked\"];\n indeterminate: CheckboxProps[\"indeterminate\"];\n }) => React.ReactNode;\n}\n\nexport type {\n BaseOptionType as SelectBaseOptionType,\n DefaultOptionType as SelectDefaultOptionType,\n};\n\n// Create inner function\nconst MainSelectInner = <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n {\n mode,\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n popupClassName,\n onDropdownVisibleChange,\n enhancePositioner,\n getPopupContainer,\n popupSize,\n popupRender,\n dropdownRender,\n classNames,\n styles = {},\n showSelectionSummary,\n selectionSummaryRender,\n value: valueProp,\n onChange: onChangeProp,\n defaultValue,\n showSelectAll,\n selectAllRender,\n options,\n ...rest\n }: SelectProps<ValueType, OptionType>,\n ref: React.Ref<React.ComponentRef<typeof AntSelect>>\n) => {\n const portalNode = useFloatingPortalNode({});\n const isMultiple = mode === \"multiple\" || mode === \"tags\";\n const [open, setOpen] = useControlledState(\n openProp,\n onOpenChange || onDropdownVisibleChange,\n defaultOpen\n );\n const cls = useCls();\n const [value, onChange] = useControlledState(\n valueProp,\n onChangeProp,\n defaultValue\n );\n\n // Stabilize render callback props used in useCallback dependencies\n const stablePopupRender = useValueAsRef(popupRender);\n const stableDropdownRender = useValueAsRef(dropdownRender);\n const stableSelectAllRender = useValueAsRef(selectAllRender);\n\n // Memoize size middleware apply function to prevent recreating on every render\n const sizeApply = useCallback(\n ({\n availableHeight,\n availableWidth,\n elements,\n }: MiddlewareState & {\n availableWidth: number;\n availableHeight: number;\n }) => {\n elements.floating.style.setProperty(\n \"--available-width\",\n availableWidth + \"px\"\n );\n elements.floating.style.setProperty(\n \"--available-height\",\n availableHeight + \"px\"\n );\n },\n []\n );\n\n // Memoize floating UI middleware array to prevent recalculating position unnecessarily\n const floatingMiddleware = useMemo(\n () => [\n offset({\n mainAxis: 4,\n }),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"bottom\",\n \"top-start\",\n \"top-end\",\n \"top\",\n ],\n }),\n shift({\n padding: 8,\n }),\n size({\n padding: 8,\n apply: sizeApply,\n }),\n ],\n [sizeApply]\n );\n\n // enhancePositioner\n const { floatingStyles, refs } = useFloating({\n placement: \"bottom-start\",\n transform: false,\n open: enhancePositioner && open,\n middleware: floatingMiddleware,\n whileElementsMounted: autoUpdate,\n });\n\n const defaultSelectionSummaryRender = useCallback(\n (v: ValueType) => {\n const count = Array.isArray(v) ? v.length : 1;\n if (isMultiple) {\n return count + ` ${count == 1 ? \"item\" : \"items\"} selected`;\n }\n return <>{v}</>;\n },\n [isMultiple]\n );\n\n // Memoize allValues calculation\n const allValues = useMemo(\n () => (Array.isArray(options) ? options.map((option) => option.value) : []),\n [options]\n );\n\n // Create stable callbacks for select all/deselect all\n const handleSelectAll = useStableCallback(() => {\n onChange(allValues as ValueType);\n });\n\n const handleDeselectAll = useStableCallback(() => {\n onChange([] as ValueType);\n });\n\n // Create stable callback for overlay click\n const handleOverlayClick = useStableCallback(() => {\n setOpen(false);\n });\n\n // Memoize floating ref callback\n const floatingRefCallback = useCallback(\n (node: HTMLElement | null) => {\n if (!node) return;\n const popupEl = node.closest(\".ds-select-dropdown\") as HTMLDivElement;\n refs.setFloating(popupEl);\n },\n [refs]\n );\n\n const dsSelectClassname = clsx(\n cls(\"select\", showSelectionSummary && \"select-selection-summary\"),\n className\n );\n\n const dsPopupClassName = clsx(\n cls(\n \"select-popup\",\n isMultiple && \"select-multiple\",\n enhancePositioner && \"select-popup-enhanced\"\n ),\n classNames?.popup?.root || popupClassName\n );\n const popupWidth =\n popupSize && typeof popupSize === \"string\" && popupSize in PopupPanelSize\n ? PopupPanelSize[popupSize as keyof typeof PopupPanelSize]\n : typeof popupSize === \"number\"\n ? popupSize + \"px\"\n : popupSize || \"fit-content\";\n const customRenderMenu = useCallback(\n (menu: React.ReactElement) => {\n const renderedMenu = stablePopupRender.current\n ? stablePopupRender.current(menu)\n : stableDropdownRender.current\n ? stableDropdownRender.current(menu)\n : menu;\n if (!showSelectAll) return renderedMenu;\n const checked = Array.isArray(value) && value.length > 0;\n const indeterminate =\n Array.isArray(value) && value.length && value.length < options.length;\n return (\n <>\n <SelectItem\n className={cls(\n \"select-item\",\n \"select-item-option\",\n checked && \"select-item-option-selected\",\n \"select-item-option-active\"\n )}\n onMouseOver={(e) => {}}\n selectAllRender={stableSelectAllRender.current}\n checked={checked}\n indeterminate={indeterminate}\n onSelectAll={handleSelectAll}\n onDeselectAll={handleDeselectAll}\n />\n <Divider />\n {renderedMenu}\n </>\n );\n },\n [\n stablePopupRender,\n stableDropdownRender,\n showSelectAll,\n value,\n options,\n cls,\n stableSelectAllRender,\n handleSelectAll,\n handleDeselectAll,\n ]\n );\n\n const refCallback = useCallback(\n (node: BaseSelectRef) => {\n if (ref) {\n if (typeof ref == \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n if (!node) return;\n refs.setReference(node?.nativeElement as HTMLElement);\n },\n [ref, refs]\n );\n\n // Memoize enhanced popup render for enhancePositioner mode\n const enhancedPopupRender = useCallback(\n (menu: React.ReactElement) => {\n return (\n <>\n <FloatingOverlay lockScroll onClick={handleOverlayClick} />\n <div ref={floatingRefCallback}>{customRenderMenu(menu)}</div>\n </>\n );\n },\n [handleOverlayClick, floatingRefCallback, customRenderMenu]\n );\n\n // Memoize final popup render\n const finalPopupRender = useCallback(\n (menu: React.ReactElement) => {\n if (!enhancePositioner) {\n return customRenderMenu(menu);\n }\n return enhancedPopupRender(menu);\n },\n [enhancePositioner, customRenderMenu, enhancedPopupRender]\n );\n\n return (\n <AntSelect\n // ref={ref}\n ref={refCallback}\n suffixIcon={<CaretDown weight=\"bold\" />}\n open={open}\n onOpenChange={setOpen}\n value={value}\n onChange={onChange}\n // for old version\n // popupClassName={dsPopupClassName}\n classNames={{\n popup: {\n root: dsPopupClassName,\n },\n ...classNames,\n }}\n {...(isMultiple\n ? {\n menuItemSelectedIcon: ({ isSelected }) => (\n <span className=\"ant-select-checkbox-indicator\">\n {isSelected ? (\n <Checkbox checked />\n ) : (\n <Checkbox checked={false} />\n )}\n </span>\n ),\n }\n : {})}\n mode={mode}\n className={dsSelectClassname}\n styles={\n enhancePositioner\n ? toMerged(styles, {\n popup: {\n root: {\n transition: \"none\",\n ...floatingStyles,\n \"--ds-select-popup-width\": popupWidth,\n } as CSSProperties,\n },\n })\n : styles\n }\n getPopupContainer={\n getPopupContainer ||\n (enhancePositioner ? () => portalNode || document.body : undefined)\n }\n popupRender={finalPopupRender}\n options={options}\n {...(showSelectionSummary\n ? {\n maxTagCount: 1,\n showSearch: false,\n labelRender: () => {\n if (selectionSummaryRender) {\n return selectionSummaryRender(value);\n }\n return defaultSelectionSummaryRender(value);\n },\n }\n : {})}\n {...rest}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainSelect = forwardRef(MainSelectInner) as <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n props: SelectProps<ValueType, OptionType> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntSelect>>;\n }\n) => ReturnType<typeof MainSelectInner>;\n\nexport const Select = Object.assign(MainSelect, {\n Option: AntSelect.Option,\n OptGroup: AntSelect.OptGroup,\n});\n"],"names":["MainSelectInner","mode","className","openProp","defaultOpen","onOpenChange","popupClassName","onDropdownVisibleChange","enhancePositioner","getPopupContainer","popupSize","popupRender","dropdownRender","classNames","styles","showSelectionSummary","selectionSummaryRender","valueProp","onChangeProp","defaultValue","showSelectAll","selectAllRender","options","rest","ref","portalNode","useFloatingPortalNode","isMultiple","open","setOpen","useControlledState","cls","useCls","value","onChange","stablePopupRender","useValueAsRef","stableDropdownRender","stableSelectAllRender","sizeApply","useCallback","availableHeight","availableWidth","elements","floatingMiddleware","useMemo","offset","autoPlacement","shift","size","floatingStyles","refs","useFloating","autoUpdate","defaultSelectionSummaryRender","v","count","allValues","option","handleSelectAll","useStableCallback","handleDeselectAll","handleOverlayClick","floatingRefCallback","node","popupEl","dsSelectClassname","clsx","dsPopupClassName","popupWidth","PopupPanelSize","customRenderMenu","menu","renderedMenu","checked","indeterminate","jsxs","Fragment","jsx","SelectItem","e","Divider","refCallback","enhancedPopupRender","FloatingOverlay","finalPopupRender","AntSelect","CaretDown","isSelected","Checkbox","toMerged","MainSelect","forwardRef","Select"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Toast as BaseToast } from '@base-ui/react';
|
|
2
|
-
import { ToastData } from './types';
|
|
2
|
+
import { ToastData, ToastProviderProps } from './types';
|
|
3
3
|
declare function InnerToast({ toast, }: {
|
|
4
4
|
toast: BaseToast.Root.ToastObject<ToastData>;
|
|
5
5
|
}): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
declare function ToastList({ className }: {
|
|
7
7
|
className?: string;
|
|
8
8
|
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
declare function ToastProvider(props:
|
|
9
|
+
declare function ToastProvider(props: ToastProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
10
10
|
export declare const Toast: typeof InnerToast & {
|
|
11
11
|
List: typeof ToastList;
|
|
12
12
|
Provider: typeof ToastProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/toast/component.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/toast/component.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAS7D,OAAO,aAAa,CAAC;AAErB,iBAAS,UAAU,CAAC,EAClB,KAAK,GACN,EAAE;IACD,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;CAC9C,2CAiFA;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAavD;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAE/C;AAED,eAAO,MAAM,KAAK;;;CAGhB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as c, jsx as r } from "react/jsx-runtime";
|
|
3
3
|
import { XIcon as N, CircleNotchIcon as g, CheckCircleIcon as w, XCircleIcon as C, WarningCircleIcon as I, InfoIcon as T } from "@bioturing/assets";
|
|
4
|
-
import { Toast as
|
|
4
|
+
import { Toast as e } from "@base-ui/react";
|
|
5
5
|
import { toastManager as a } from "./function.js";
|
|
6
6
|
import { useEffect as k, useCallback as b } from "react";
|
|
7
7
|
import { Button as v } from "../button/component.js";
|
|
@@ -15,7 +15,7 @@ import { clsx as j } from "../utils/cn.js";
|
|
|
15
15
|
function f({
|
|
16
16
|
toast: o
|
|
17
17
|
}) {
|
|
18
|
-
const
|
|
18
|
+
const t = p(), n = {
|
|
19
19
|
info: /* @__PURE__ */ r(T, { weight: "fill" }),
|
|
20
20
|
warning: /* @__PURE__ */ r(I, { weight: "fill" }),
|
|
21
21
|
error: /* @__PURE__ */ r(C, { weight: "fill" }),
|
|
@@ -32,7 +32,7 @@ function f({
|
|
|
32
32
|
"div",
|
|
33
33
|
{
|
|
34
34
|
...m,
|
|
35
|
-
className:
|
|
35
|
+
className: t(
|
|
36
36
|
"toast-description",
|
|
37
37
|
s ? "toast-description-traceback" : "",
|
|
38
38
|
d
|
|
@@ -59,31 +59,25 @@ function f({
|
|
|
59
59
|
) })
|
|
60
60
|
]
|
|
61
61
|
}
|
|
62
|
-
) : /* @__PURE__ */ r("p", { ...m, className:
|
|
62
|
+
) : /* @__PURE__ */ r("p", { ...m, className: t("toast-description", d), children: l });
|
|
63
63
|
},
|
|
64
|
-
[s,
|
|
64
|
+
[s, t, o.id]
|
|
65
65
|
);
|
|
66
|
-
return /* @__PURE__ */ c(
|
|
67
|
-
/* @__PURE__ */ r("span", { className:
|
|
68
|
-
/* @__PURE__ */ c("div", { className:
|
|
69
|
-
/* @__PURE__ */ r(
|
|
70
|
-
/* @__PURE__ */ r(
|
|
66
|
+
return /* @__PURE__ */ c(e.Root, { toast: o, className: t("toast"), children: [
|
|
67
|
+
/* @__PURE__ */ r("span", { className: t("toast-icon-wrap"), children: /* @__PURE__ */ r("span", { className: t("toast-icon", `toast-icon-${i}`), children: n[i] }) }),
|
|
68
|
+
/* @__PURE__ */ c("div", { className: t("toast-content"), children: [
|
|
69
|
+
/* @__PURE__ */ r(e.Title, { className: t("toast-title") }),
|
|
70
|
+
/* @__PURE__ */ r(e.Description, { render: u })
|
|
71
71
|
] }),
|
|
72
|
-
/* @__PURE__ */ r(
|
|
73
|
-
t.Close,
|
|
74
|
-
{
|
|
75
|
-
className: e("toast-close"),
|
|
76
|
-
render: /* @__PURE__ */ r("span", { children: /* @__PURE__ */ r(M, { size: "small", children: /* @__PURE__ */ r(N, {}) }) })
|
|
77
|
-
}
|
|
78
|
-
)
|
|
72
|
+
/* @__PURE__ */ r(e.Close, { className: t("toast-close"), children: /* @__PURE__ */ r(M, { as: "span", size: "small", children: /* @__PURE__ */ r(N, {}) }) })
|
|
79
73
|
] });
|
|
80
74
|
}
|
|
81
75
|
function E({ className: o }) {
|
|
82
|
-
const { toasts:
|
|
83
|
-
return /* @__PURE__ */ r(
|
|
76
|
+
const { toasts: t } = e.useToastManager(), n = p();
|
|
77
|
+
return /* @__PURE__ */ r(e.Portal, { children: /* @__PURE__ */ r(e.Viewport, { className: j(n("toast-viewport"), o), children: t.map((i) => /* @__PURE__ */ r(f, { toast: i }, i.id)) }) });
|
|
84
78
|
}
|
|
85
79
|
function y(o) {
|
|
86
|
-
return /* @__PURE__ */ r(
|
|
80
|
+
return /* @__PURE__ */ r(e.Provider, { toastManager: a, ...o });
|
|
87
81
|
}
|
|
88
82
|
const H = Object.assign(f, {
|
|
89
83
|
List: E,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/toast/component.tsx"],"sourcesContent":["\"use client\";\nimport { useCls, clsx } from \"../utils\";\nimport {\n CheckCircleIcon,\n CircleNotchIcon,\n InfoIcon,\n WarningCircleIcon,\n XIcon,\n XCircleIcon,\n} from \"@bioturing/assets\";\nimport { Toast as BaseToast } from \"@base-ui/react\";\nimport { IconButton } from \"../icon-button\";\nimport { ToastData } from \"./types\";\nimport { toastManager } from \"./function\";\nimport { isTracebackError, type GenericHTMLProps } from \"../utils\";\nimport { useCallback, useEffect } from \"react\";\nimport { Button } from \"../button/component\";\nimport { Modal } from \"../modal\";\nimport { CodeBlock } from \"../code-block\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nfunction InnerToast({\n toast,\n}: {\n toast: BaseToast.Root.ToastObject<ToastData>;\n}) {\n const cls = useCls();\n const toastIconMap = {\n info: <InfoIcon weight=\"fill\" />,\n warning: <WarningCircleIcon weight=\"fill\" />,\n error: <XCircleIcon weight=\"fill\" />,\n success: <CheckCircleIcon weight=\"fill\" />,\n progress: <CircleNotchIcon />,\n };\n const type = toast.data?.type || \"info\";\n const isTraceback = isTracebackError(toast?.description);\n\n // Update manager timeout for traceback to disable auto-dismiss\n useEffect(() => {\n if (isTraceback) {\n toastManager.update(toast.id, { timeout: 0 });\n }\n }, [isTraceback, toast.id]);\n // console.log(toast);\n const renderDescription: BaseToast.Description.Props[\"render\"] = useCallback(\n (props: GenericHTMLProps) => {\n const { children, className, ...rest } = props;\n if (isTraceback) {\n return (\n <div\n {...rest}\n className={cls(\n \"toast-description\",\n isTraceback ? \"toast-description-traceback\" : \"\",\n className\n )}\n >\n <p>\n An unexpected error occurred.\n <br />\n Please contact us with error details for support.\n </p>\n <p>\n <Button\n size=\"small\"\n onClick={() => {\n Modal.open({\n title: \"Error details\",\n content: <CodeBlock>{children}</CodeBlock>,\n hideOkButton: true,\n });\n toastManager.close(toast.id);\n }}\n >\n View error details\n </Button>\n </p>\n </div>\n );\n }\n return (\n <p {...rest} className={cls(\"toast-description\", className)}>\n {children}\n </p>\n );\n },\n [isTraceback, cls, toast.id]\n );\n return (\n <BaseToast.Root toast={toast} className={cls(\"toast\")}>\n <span className={cls(\"toast-icon-wrap\")}>\n <span className={cls(\"toast-icon\", `toast-icon-${type}`)}>\n {toastIconMap[type]}\n </span>\n </span>\n <div className={cls(\"toast-content\")}>\n <BaseToast.Title className={cls(\"toast-title\")} />\n <BaseToast.Description render={renderDescription} />\n </div>\n <BaseToast.Close
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/toast/component.tsx"],"sourcesContent":["\"use client\";\nimport { useCls, clsx } from \"../utils\";\nimport {\n CheckCircleIcon,\n CircleNotchIcon,\n InfoIcon,\n WarningCircleIcon,\n XIcon,\n XCircleIcon,\n} from \"@bioturing/assets\";\nimport { Toast as BaseToast } from \"@base-ui/react\";\nimport { IconButton } from \"../icon-button\";\nimport { ToastData, type ToastProviderProps } from \"./types\";\nimport { toastManager } from \"./function\";\nimport { isTracebackError, type GenericHTMLProps } from \"../utils\";\nimport { useCallback, useEffect } from \"react\";\nimport { Button } from \"../button/component\";\nimport { Modal } from \"../modal\";\nimport { CodeBlock } from \"../code-block\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nfunction InnerToast({\n toast,\n}: {\n toast: BaseToast.Root.ToastObject<ToastData>;\n}) {\n const cls = useCls();\n const toastIconMap = {\n info: <InfoIcon weight=\"fill\" />,\n warning: <WarningCircleIcon weight=\"fill\" />,\n error: <XCircleIcon weight=\"fill\" />,\n success: <CheckCircleIcon weight=\"fill\" />,\n progress: <CircleNotchIcon />,\n };\n const type = toast.data?.type || \"info\";\n const isTraceback = isTracebackError(toast?.description);\n\n // Update manager timeout for traceback to disable auto-dismiss\n useEffect(() => {\n if (isTraceback) {\n toastManager.update(toast.id, { timeout: 0 });\n }\n }, [isTraceback, toast.id]);\n // console.log(toast);\n const renderDescription: BaseToast.Description.Props[\"render\"] = useCallback(\n (props: GenericHTMLProps) => {\n const { children, className, ...rest } = props;\n if (isTraceback) {\n return (\n <div\n {...rest}\n className={cls(\n \"toast-description\",\n isTraceback ? \"toast-description-traceback\" : \"\",\n className\n )}\n >\n <p>\n An unexpected error occurred.\n <br />\n Please contact us with error details for support.\n </p>\n <p>\n <Button\n size=\"small\"\n onClick={() => {\n Modal.open({\n title: \"Error details\",\n content: <CodeBlock>{children}</CodeBlock>,\n hideOkButton: true,\n });\n toastManager.close(toast.id);\n }}\n >\n View error details\n </Button>\n </p>\n </div>\n );\n }\n return (\n <p {...rest} className={cls(\"toast-description\", className)}>\n {children}\n </p>\n );\n },\n [isTraceback, cls, toast.id]\n );\n return (\n <BaseToast.Root toast={toast} className={cls(\"toast\")}>\n <span className={cls(\"toast-icon-wrap\")}>\n <span className={cls(\"toast-icon\", `toast-icon-${type}`)}>\n {toastIconMap[type]}\n </span>\n </span>\n <div className={cls(\"toast-content\")}>\n <BaseToast.Title className={cls(\"toast-title\")} />\n <BaseToast.Description render={renderDescription} />\n </div>\n <BaseToast.Close className={cls(\"toast-close\")}>\n <IconButton as=\"span\" size=\"small\">\n <XIcon />\n </IconButton>\n </BaseToast.Close>\n </BaseToast.Root>\n );\n}\n\nfunction ToastList({ className }: { className?: string }) {\n const { toasts } = BaseToast.useToastManager();\n const cls = useCls();\n\n return (\n <BaseToast.Portal>\n <BaseToast.Viewport className={clsx(cls(\"toast-viewport\"), className)}>\n {toasts.map((toast) => (\n <InnerToast key={toast.id} toast={toast} />\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n );\n}\n\nfunction ToastProvider(props: ToastProviderProps) {\n return <BaseToast.Provider toastManager={toastManager} {...props} />;\n}\n\nexport const Toast = Object.assign(InnerToast, {\n List: ToastList,\n Provider: ToastProvider,\n});\n"],"names":["InnerToast","toast","cls","useCls","toastIconMap","jsx","InfoIcon","WarningCircleIcon","XCircleIcon","CheckCircleIcon","CircleNotchIcon","type","isTraceback","isTracebackError","useEffect","toastManager","renderDescription","useCallback","props","children","className","rest","jsxs","Button","Modal","CodeBlock","BaseToast","IconButton","XIcon","ToastList","toasts","clsx","ToastProvider","Toast"],"mappings":"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"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ToastData } from './types';
|
|
1
|
+
import { ToastOptions } from './types';
|
|
3
2
|
export declare const toastManager: import('@base-ui/react').ToastManager<any>;
|
|
4
|
-
export declare const toast: ((message: string, options?:
|
|
5
|
-
info: (message: string, options?:
|
|
6
|
-
success: (message: string, options?:
|
|
7
|
-
error: (message: string, options?:
|
|
8
|
-
warning: (message: string, options?:
|
|
9
|
-
progress: (message: string, options?:
|
|
3
|
+
export declare const toast: ((message: string, options?: ToastOptions) => string) & {
|
|
4
|
+
info: (message: string, options?: ToastOptions) => string;
|
|
5
|
+
success: (message: string, options?: ToastOptions) => string;
|
|
6
|
+
error: (message: string, options?: ToastOptions) => string;
|
|
7
|
+
warning: (message: string, options?: ToastOptions) => string;
|
|
8
|
+
progress: (message: string, options?: ToastOptions) => string;
|
|
10
9
|
};
|
|
11
10
|
//# sourceMappingURL=function.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/components/toast/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/components/toast/function.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,YAAY,EAAa,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,YAAY,4CAAiC,CAAC;AAoB3D,eAAO,MAAM,KAAK,aAhBL,MAAM,YACL,YAAY;oBADb,MAAM,YACL,YAAY;uBADb,MAAM,YACL,YAAY;qBADb,MAAM,YACL,YAAY;uBADb,MAAM,YACL,YAAY;wBADb,MAAM,YACL,YAAY;CAqBxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sources":["../../../src/components/toast/function.ts"],"sourcesContent":["\"use client\";\nimport { Toast as BaseToast
|
|
1
|
+
{"version":3,"file":"function.js","sources":["../../../src/components/toast/function.ts"],"sourcesContent":["\"use client\";\nimport { Toast as BaseToast } from \"@base-ui/react\";\nimport type { ToastData, ToastOptions, ToastType } from \"./types\";\n\nexport const toastManager = BaseToast.createToastManager();\n\nfunction createToastTypeFunction(type: ToastType) {\n return (\n message: string,\n options?: ToastOptions\n ) => {\n const toastId = toastManager.add<ToastData>({\n description: message,\n data: {\n type: type,\n },\n // progress and error toasts should not auto close\n ...(type === \"progress\" ? { timeout: 0 } : {}),\n ...options,\n });\n return toastId;\n };\n}\n\nexport const toast = Object.assign(createToastTypeFunction(\"info\"), {\n info: createToastTypeFunction(\"info\"),\n success: createToastTypeFunction(\"success\"),\n error: createToastTypeFunction(\"error\"),\n warning: createToastTypeFunction(\"warning\"),\n progress: createToastTypeFunction(\"progress\"),\n});\n"],"names":["toastManager","BaseToast","createToastTypeFunction","type","message","options","toast"],"mappings":";;AAIO,MAAMA,IAAeC,EAAU,mBAAA;AAEtC,SAASC,EAAwBC,GAAiB;AAChD,SAAO,CACLC,GACAC,MAEgBL,EAAa,IAAe;AAAA,IAC1C,aAAaI;AAAA,IACb,MAAM;AAAA,MACJ,MAAAD;AAAA,IAAA;AAAA;AAAA,IAGF,GAAIA,MAAS,aAAa,EAAE,SAAS,EAAA,IAAM,CAAA;AAAA,IAC3C,GAAGE;AAAA,EAAA,CACJ;AAGL;AAEO,MAAMC,IAAQ,OAAO,OAAOJ,EAAwB,MAAM,GAAG;AAAA,EAClE,MAAMA,EAAwB,MAAM;AAAA,EACpC,SAASA,EAAwB,SAAS;AAAA,EAC1C,OAAOA,EAAwB,OAAO;AAAA,EACtC,SAASA,EAAwB,SAAS;AAAA,EAC1C,UAAUA,EAAwB,UAAU;AAC9C,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.ds-toast-viewport{position:fixed;width:100%;max-width:30rem;margin:0 auto;bottom:2rem;left:50%;transform:translate(-50%);top:auto;z-index:var(--ds-z-index-toast);display:flex;justify-content:center}.ds-toast{--gap: .5rem;--offset-y: calc( var(--toast-offset-y) * -1 + (var(--toast-index) * var(--gap) * -1) + var(--toast-swipe-movement-y) );font-family:var(--font-sans);position:absolute;box-sizing:border-box;background:var(--ds-color-bg-elevated);color:var(--ds-color-text);padding:.75rem 1rem;max-width:100%;display:inline-flex;gap:var(--gap);box-shadow:var(--ds-box-shadow-secondary);background-clip:padding-box;border-radius:.5rem;bottom:0;margin-right:0;-webkit-user-select:none;user-select:none;transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s;cursor:default;z-index:calc(1000 - var(--toast-index));transform:translate(var(--toast-swipe-movement-x)) translateY(calc(var(--toast-swipe-movement-y) + (var(--toast-index) * -
|
|
1
|
+
@layer components{.ds-toast-viewport{position:fixed;width:100%;max-width:30rem;margin:0 auto;bottom:2rem;left:50%;transform:translate(-50%);top:auto;z-index:var(--ds-z-index-toast);display:flex;justify-content:center}.ds-toast{--gap: .5rem;--stack-step: .875rem;--scale-step: .1;--min-scale: .2;--offset-y: calc( var(--toast-offset-y) * -1 + (var(--toast-index) * var(--gap) * -1) + var(--toast-swipe-movement-y) );font-family:var(--font-sans);position:absolute;box-sizing:border-box;background:var(--ds-color-bg-elevated);color:var(--ds-color-text);padding:.75rem 1rem;max-width:100%;display:inline-flex;gap:var(--gap);box-shadow:var(--ds-box-shadow-secondary);background-clip:padding-box;border-radius:.5rem;bottom:0;margin-right:0;-webkit-user-select:none;user-select:none;transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s;cursor:default;z-index:calc(1000 - var(--toast-index));transform-origin:bottom center;transform:translate(var(--toast-swipe-movement-x)) translateY(calc(var(--toast-swipe-movement-y) + (var(--toast-index) * var(--stack-step) * -1))) scale(max(var(--min-scale),calc(1 - (var(--toast-index) * var(--scale-step)))));opacity:clamp(0,calc(9 - var(--toast-index)),1)}.ds-toast:after{top:100%}.ds-toast[data-expanded]{transform:translate(var(--toast-swipe-movement-x)) translateY(var(--offset-y));opacity:1}.ds-toast[data-starting-style],.ds-toast[data-ending-style]:not([data-limited]){transform:translateY(150%)}.ds-toast[data-ending-style]{opacity:0}.ds-toast[data-ending-style][data-swipe-direction=up]{transform:translateY(calc(var(--toast-swipe-movement-y) - 150%))}.ds-toast[data-ending-style][data-swipe-direction=left]{transform:translate(calc(var(--toast-swipe-movement-x) - 150%)) translateY(var(--offset-y))}.ds-toast[data-ending-style][data-swipe-direction=right]{transform:translate(calc(var(--toast-swipe-movement-x) + 150%)) translateY(var(--offset-y))}.ds-toast[data-ending-style][data-swipe-direction=down]{transform:translateY(calc(var(--toast-swipe-movement-y) + 150%))}.ds-toast:after{content:"";position:absolute;width:100%;left:0;height:calc(var(--gap) + 1px)}.ds-toast-content{display:flex;flex:1;flex-direction:column;max-height:calc(100vh - 92px);gap:2;overflow-y:auto}.ds-toast-title{font-size:var(--ds-font-size-heading-5);font-weight:600;line-height:var(--ds-line-height-heading-5)}.ds-toast-description{font-size:var(--ds-font-size);line-height:var(--ds-line-height)}.ds-toast-description:last-child{margin-bottom:0}.ds-toast-description-traceback p:not(:first-child){margin-top:.5rem}.ds-toast-icon-wrap{width:1.25rem;font-size:1.25rem;display:block;flex:0}.ds-toast-icon{width:1.25rem;height:1.25rem;display:block}.ds-toast-icon.ds-toast-icon-info{color:var(--ds-color-primary)}.ds-toast-icon.ds-toast-icon-success{color:var(--ds-color-success)}.ds-toast-icon.ds-toast-icon-warning{color:var(--ds-color-warning)}.ds-toast-icon.ds-toast-icon-error{color:var(--ds-color-error)}.ds-toast-icon.ds-toast-icon-progress{color:var(--ds-color-primary);animation:var(--ds-animate-spin)}.ds-toast-close{margin-top:.125rem;display:flex}}
|