lynote-ui 0.0.8 → 0.0.9
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/accordion/index.js +2 -2
- package/dist/accordion/index.mjs +1 -1
- package/dist/alert/index.js +2 -2
- package/dist/alert/index.mjs +1 -1
- package/dist/alert-dialog/index.js +2 -2
- package/dist/alert-dialog/index.mjs +1 -1
- package/dist/aspect-ratio/index.js +2 -2
- package/dist/aspect-ratio/index.mjs +1 -1
- package/dist/avatar/index.js +2 -2
- package/dist/avatar/index.mjs +1 -1
- package/dist/badge/index.js +2 -2
- package/dist/badge/index.mjs +1 -1
- package/dist/breadcrumb/index.js +2 -2
- package/dist/breadcrumb/index.mjs +1 -1
- package/dist/button/index.js +2 -2
- package/dist/button/index.mjs +1 -1
- package/dist/button-group/index.js +2 -2
- package/dist/button-group/index.mjs +1 -1
- package/dist/calendar/index.js +2 -2
- package/dist/calendar/index.mjs +1 -1
- package/dist/card/index.js +2 -2
- package/dist/card/index.mjs +1 -1
- package/dist/carousel/index.js +2 -2
- package/dist/carousel/index.mjs +1 -1
- package/dist/chart/index.js +2 -2
- package/dist/chart/index.mjs +1 -1
- package/dist/checkbox/index.js +2 -2
- package/dist/checkbox/index.mjs +1 -1
- package/dist/{chunk-CoQrYLCe.js → chunk-8l464Juk.js} +0 -22
- package/dist/collapsible/index.js +1 -1
- package/dist/combobox/index.js +2 -2
- package/dist/combobox/index.mjs +1 -1
- package/dist/command/index.js +2 -2
- package/dist/command/index.mjs +1 -1
- package/dist/context-menu/index.js +8 -6
- package/dist/context-menu/index.js.map +1 -1
- package/dist/context-menu/index.mjs +7 -5
- package/dist/context-menu/index.mjs.map +1 -1
- package/dist/date-picker/index.js +1 -1
- package/dist/dialog/index.js +2 -2
- package/dist/dialog/index.mjs +1 -1
- package/dist/direction/index.js +1 -1
- package/dist/drawer/index.js +2 -2
- package/dist/drawer/index.mjs +1 -1
- package/dist/dropdown-menu/index.js +2 -2
- package/dist/dropdown-menu/index.mjs +1 -1
- package/dist/empty/index.js +2 -2
- package/dist/empty/index.mjs +1 -1
- package/dist/field/index.js +4 -4
- package/dist/field/index.js.map +1 -1
- package/dist/field/index.mjs +3 -3
- package/dist/field/index.mjs.map +1 -1
- package/dist/hover-card/index.js +2 -2
- package/dist/hover-card/index.mjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +19 -25
- package/dist/index.mjs +4 -8
- package/dist/input/index.js +2 -2
- package/dist/input/index.mjs +1 -1
- package/dist/input-group/index.js +2 -2
- package/dist/input-group/index.mjs +1 -1
- package/dist/input-otp/index.js +2 -2
- package/dist/input-otp/index.mjs +1 -1
- package/dist/item/index.js +2 -2
- package/dist/item/index.mjs +1 -1
- package/dist/kbd/index.js +2 -2
- package/dist/kbd/index.mjs +1 -1
- package/dist/label/index.js +2 -2
- package/dist/label/index.mjs +1 -1
- package/dist/menubar/index.js +2 -2
- package/dist/menubar/index.mjs +1 -1
- package/dist/native-select/index.js +2 -2
- package/dist/native-select/index.mjs +1 -1
- package/dist/navigation-menu/index.js +2 -2
- package/dist/navigation-menu/index.mjs +1 -1
- package/dist/pagination/index.js +2 -2
- package/dist/pagination/index.mjs +1 -1
- package/dist/popover/index.js +2 -2
- package/dist/popover/index.mjs +1 -1
- package/dist/progress/index.js +2 -2
- package/dist/progress/index.mjs +1 -1
- package/dist/radio-group/index.js +2 -2
- package/dist/radio-group/index.mjs +1 -1
- package/dist/resizable/index.js +2 -2
- package/dist/resizable/index.mjs +1 -1
- package/dist/scroll-area/index.js +2 -2
- package/dist/scroll-area/index.mjs +1 -1
- package/dist/select/SelectMultipleValue.d.ts +8 -0
- package/dist/select/context.d.ts +4 -0
- package/dist/select/index.d.ts +4 -2
- package/dist/select/index.js +11 -110
- package/dist/select/index.mjs +1 -98
- package/dist/select/type.d.ts +33 -0
- package/dist/select/utils.d.ts +8 -0
- package/dist/select---wbqUEL.js +402 -0
- package/dist/select---wbqUEL.js.map +1 -0
- package/dist/select-DJcPlxTU.mjs +341 -0
- package/dist/select-DJcPlxTU.mjs.map +1 -0
- package/dist/separator/index.js +2 -2
- package/dist/separator/index.mjs +1 -1
- package/dist/sheet/index.js +2 -2
- package/dist/sheet/index.mjs +1 -1
- package/dist/sidebar/index.js +1 -1
- package/dist/sidebar/index.mjs +1 -1
- package/dist/{sidebar-Ddt6hBj_.mjs → sidebar-BO_ns2qp.mjs} +2 -2
- package/dist/{sidebar-Ddt6hBj_.mjs.map → sidebar-BO_ns2qp.mjs.map} +1 -1
- package/dist/{sidebar-E9uledix.js → sidebar-KSjzFqo5.js} +3 -3
- package/dist/{sidebar-E9uledix.js.map → sidebar-KSjzFqo5.js.map} +1 -1
- package/dist/skeleton/index.js +2 -2
- package/dist/skeleton/index.mjs +1 -1
- package/dist/slider/index.js +2 -2
- package/dist/slider/index.mjs +1 -1
- package/dist/sonner/index.js +2 -2
- package/dist/{sonner-BbeMMXzI.js → sonner-6WfFozil.js} +2 -2
- package/dist/{sonner-BbeMMXzI.js.map → sonner-6WfFozil.js.map} +1 -1
- package/dist/spinner/index.js +2 -2
- package/dist/spinner/index.mjs +1 -1
- package/dist/style.css +547 -28
- package/dist/switch/index.js +2 -2
- package/dist/switch/index.mjs +1 -1
- package/dist/table/index.js +2 -2
- package/dist/table/index.mjs +1 -1
- package/dist/tabs/index.js +2 -2
- package/dist/tabs/index.mjs +1 -1
- package/dist/textarea/index.js +2 -2
- package/dist/textarea/index.mjs +1 -1
- package/dist/toggle/index.js +2 -2
- package/dist/toggle/index.mjs +1 -1
- package/dist/toggle-group/index.js +2 -2
- package/dist/toggle-group/index.mjs +1 -1
- package/dist/tooltip/index.js +2 -2
- package/dist/tooltip/index.mjs +1 -1
- package/dist/typography/index.d.ts +14 -0
- package/dist/typography/index.js +120 -0
- package/dist/typography/index.js.map +1 -0
- package/dist/typography/index.mjs +105 -0
- package/dist/typography/index.mjs.map +1 -0
- package/dist/{utils-TtTqRIUX.mjs → utils-Bg4z4cXr.mjs} +1 -1
- package/dist/{utils-TtTqRIUX.mjs.map → utils-Bg4z4cXr.mjs.map} +1 -1
- package/dist/{utils-BGuEr0aP.js → utils-DrngEK1K.js} +2 -2
- package/dist/{utils-BGuEr0aP.js.map → utils-DrngEK1K.js.map} +1 -1
- package/package.json +10 -7
- package/dist/form/components/Form.d.ts +0 -4
- package/dist/form/components/FormControl.d.ts +0 -3
- package/dist/form/components/FormDescription.d.ts +0 -3
- package/dist/form/components/FormField.d.ts +0 -3
- package/dist/form/components/FormItem.d.ts +0 -7
- package/dist/form/components/FormLabel.d.ts +0 -3
- package/dist/form/components/FormMessage.d.ts +0 -4
- package/dist/form/components/variants.d.ts +0 -6
- package/dist/form/context/index.d.ts +0 -4
- package/dist/form/hooks/useFormField.d.ts +0 -14
- package/dist/form/index.d.ts +0 -11
- package/dist/form/index.js +0 -19
- package/dist/form/index.mjs +0 -3
- package/dist/form/type.d.ts +0 -48
- package/dist/form-DLd4sOko.mjs +0 -183
- package/dist/form-DLd4sOko.mjs.map +0 -1
- package/dist/form-h_cJBAwg.js +0 -205
- package/dist/form-h_cJBAwg.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/select/index.js.map +0 -1
- package/dist/select/index.mjs.map +0 -1
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
const require_chunk = require("./chunk-8l464Juk.js");
|
|
2
|
+
const require_utils = require("./utils-DrngEK1K.js");
|
|
3
|
+
const require_badge = require("./badge/index.js");
|
|
4
|
+
let lucide_react = require("lucide-react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let react = require("react");
|
|
7
|
+
react = require_chunk.__toESM(react);
|
|
8
|
+
let _base_ui_react_select = require("@base-ui/react/select");
|
|
9
|
+
//#region src/select/context.ts
|
|
10
|
+
var SelectContext = react.createContext(null);
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/select/utils.ts
|
|
13
|
+
function isGroupedItems(items) {
|
|
14
|
+
return items != null && items.length > 0 && typeof items[0] === "object" && items[0] != null && "items" in items[0];
|
|
15
|
+
}
|
|
16
|
+
function stringifyAsLabel(value, itemToStringLabel) {
|
|
17
|
+
if (itemToStringLabel && value != null) return itemToStringLabel(value) ?? "";
|
|
18
|
+
if (value && typeof value === "object") {
|
|
19
|
+
if ("label" in value && value.label != null) return String(value.label);
|
|
20
|
+
if ("value" in value) return String(value.value);
|
|
21
|
+
}
|
|
22
|
+
return String(value ?? "");
|
|
23
|
+
}
|
|
24
|
+
function resolveSelectedLabel(value, { items, itemToStringLabel, isItemEqualToValue }) {
|
|
25
|
+
const fallback = () => stringifyAsLabel(value, itemToStringLabel);
|
|
26
|
+
if (itemToStringLabel && value != null) return itemToStringLabel(value);
|
|
27
|
+
if (value && typeof value === "object" && "label" in value) return value.label;
|
|
28
|
+
if (items && !Array.isArray(items)) return items[String(value)] ?? fallback();
|
|
29
|
+
if (Array.isArray(items)) return (isGroupedItems(items) ? items.flatMap((group) => group.items) : items).find((item) => {
|
|
30
|
+
if (isItemEqualToValue?.(item.value, value)) return true;
|
|
31
|
+
if (Object.is(item.value, value)) return true;
|
|
32
|
+
return value != null && typeof value === "object" && "value" in value && Object.is(item.value, value.value);
|
|
33
|
+
})?.label ?? fallback();
|
|
34
|
+
return fallback();
|
|
35
|
+
}
|
|
36
|
+
function resolveSelectedItem(value, selectContext) {
|
|
37
|
+
const { items, isItemEqualToValue } = selectContext;
|
|
38
|
+
const fallback = () => ({
|
|
39
|
+
label: resolveSelectedLabel(value, selectContext),
|
|
40
|
+
value
|
|
41
|
+
});
|
|
42
|
+
if (items && !Array.isArray(items)) return {
|
|
43
|
+
label: items[String(value)] ?? fallback().label,
|
|
44
|
+
value
|
|
45
|
+
};
|
|
46
|
+
if (Array.isArray(items)) {
|
|
47
|
+
const match = (isGroupedItems(items) ? items.flatMap((group) => group.items) : items).find((item) => {
|
|
48
|
+
if (isItemEqualToValue?.(item.value, value)) return true;
|
|
49
|
+
if (Object.is(item.value, value)) return true;
|
|
50
|
+
return value != null && typeof value === "object" && "value" in value && Object.is(item.value, value.value);
|
|
51
|
+
});
|
|
52
|
+
if (match) return match;
|
|
53
|
+
}
|
|
54
|
+
return fallback();
|
|
55
|
+
}
|
|
56
|
+
function reactNodeToString(node) {
|
|
57
|
+
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
58
|
+
return "选项";
|
|
59
|
+
}
|
|
60
|
+
function createRemoveEventDetails(event) {
|
|
61
|
+
let isCanceled = false;
|
|
62
|
+
let isPropagationAllowed = false;
|
|
63
|
+
return {
|
|
64
|
+
reason: "item-press",
|
|
65
|
+
event: event.nativeEvent,
|
|
66
|
+
trigger: event.currentTarget,
|
|
67
|
+
cancel: () => {
|
|
68
|
+
isCanceled = true;
|
|
69
|
+
},
|
|
70
|
+
allowPropagation: () => {
|
|
71
|
+
isPropagationAllowed = true;
|
|
72
|
+
},
|
|
73
|
+
get isCanceled() {
|
|
74
|
+
return isCanceled;
|
|
75
|
+
},
|
|
76
|
+
get isPropagationAllowed() {
|
|
77
|
+
return isPropagationAllowed;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/select/SelectMultipleValue.tsx
|
|
83
|
+
function SelectMultipleValue({ placeholder, renderOverflow, value }) {
|
|
84
|
+
const selectContext = react.useContext(SelectContext);
|
|
85
|
+
const containerRef = react.useRef(null);
|
|
86
|
+
const measureRef = react.useRef(null);
|
|
87
|
+
const values = react.useMemo(() => Array.isArray(value) ? value : [], [value]);
|
|
88
|
+
const [visibleCount, setVisibleCount] = react.useState(values.length);
|
|
89
|
+
const updateVisibleCount = react.useCallback(() => {
|
|
90
|
+
const container = containerRef.current;
|
|
91
|
+
if (!container || values.length === 0) {
|
|
92
|
+
setVisibleCount(values.length);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const containerWidth = container.clientWidth;
|
|
96
|
+
const gap = Number.parseFloat(getComputedStyle(container).columnGap) || 0;
|
|
97
|
+
const itemWidths = Array.from(measureRef.current?.querySelectorAll("[data-select-value-measure]") ?? [], (element) => element.offsetWidth);
|
|
98
|
+
const summaryWidths = Array.from(measureRef.current?.querySelectorAll("[data-select-summary-measure]") ?? [], (element) => element.offsetWidth);
|
|
99
|
+
let nextVisibleCount = 0;
|
|
100
|
+
for (let count = values.length; count >= 0; count -= 1) {
|
|
101
|
+
const hiddenCount = values.length - count;
|
|
102
|
+
const selectedWidth = itemWidths.slice(0, count).reduce((total, width) => total + width, 0);
|
|
103
|
+
const summaryWidth = hiddenCount > 0 ? summaryWidths[hiddenCount - 1] ?? 0 : 0;
|
|
104
|
+
const itemsCount = count + (hiddenCount > 0 ? 1 : 0);
|
|
105
|
+
const totalGap = Math.max(itemsCount - 1, 0) * gap;
|
|
106
|
+
if (selectedWidth + summaryWidth + totalGap <= containerWidth) {
|
|
107
|
+
nextVisibleCount = count;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
setVisibleCount(nextVisibleCount);
|
|
112
|
+
}, [values]);
|
|
113
|
+
react.useLayoutEffect(() => {
|
|
114
|
+
updateVisibleCount();
|
|
115
|
+
const container = containerRef.current;
|
|
116
|
+
if (!container) return;
|
|
117
|
+
const resizeObserver = new ResizeObserver(updateVisibleCount);
|
|
118
|
+
resizeObserver.observe(container);
|
|
119
|
+
return () => {
|
|
120
|
+
resizeObserver.disconnect();
|
|
121
|
+
};
|
|
122
|
+
}, [updateVisibleCount]);
|
|
123
|
+
if (!selectContext || values.length === 0) return placeholder ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
124
|
+
className: "text-muted-foreground",
|
|
125
|
+
children: placeholder
|
|
126
|
+
}) : null;
|
|
127
|
+
const labels = values.map((itemValue) => resolveSelectedLabel(itemValue, selectContext));
|
|
128
|
+
const selectedItems = values.map((itemValue) => resolveSelectedItem(itemValue, selectContext));
|
|
129
|
+
const visibleItemValues = values.slice(0, visibleCount);
|
|
130
|
+
const hiddenCount = values.length - visibleCount;
|
|
131
|
+
const renderOverflowContent = (count) => {
|
|
132
|
+
const hiddenItems = selectedItems.slice(values.length - count);
|
|
133
|
+
const visibleItems = selectedItems.slice(0, values.length - count);
|
|
134
|
+
if (renderOverflow) return renderOverflow({
|
|
135
|
+
hiddenCount: count,
|
|
136
|
+
hiddenValues: hiddenItems,
|
|
137
|
+
visibleValues: visibleItems
|
|
138
|
+
});
|
|
139
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_badge.Badge, {
|
|
140
|
+
variant: "secondary",
|
|
141
|
+
className: "shrink-0",
|
|
142
|
+
children: [
|
|
143
|
+
"+",
|
|
144
|
+
count,
|
|
145
|
+
"..."
|
|
146
|
+
]
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
const renderValueBadge = (itemValue, label, index, measure) => {
|
|
150
|
+
const labelText = reactNodeToString(label);
|
|
151
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_badge.Badge, {
|
|
152
|
+
"data-select-value-measure": measure ? "" : void 0,
|
|
153
|
+
variant: "secondary",
|
|
154
|
+
className: "max-w-full shrink-0",
|
|
155
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
156
|
+
className: "truncate",
|
|
157
|
+
children: label
|
|
158
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
159
|
+
"aria-label": `移除${labelText}`,
|
|
160
|
+
"data-icon": "inline-end",
|
|
161
|
+
role: "button",
|
|
162
|
+
className: "hover:bg-muted-foreground/20 inline-flex size-3.5 cursor-pointer items-center justify-center rounded-full transition",
|
|
163
|
+
onPointerDown: (event) => {
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
event.stopPropagation();
|
|
166
|
+
},
|
|
167
|
+
onClick: (event) => {
|
|
168
|
+
event.preventDefault();
|
|
169
|
+
event.stopPropagation();
|
|
170
|
+
if (selectContext.disabled || selectContext.readOnly) return;
|
|
171
|
+
const nextValue = values.filter((selectedValue) => {
|
|
172
|
+
if (selectContext.isItemEqualToValue?.(itemValue, selectedValue)) return false;
|
|
173
|
+
return !Object.is(selectedValue, itemValue);
|
|
174
|
+
});
|
|
175
|
+
selectContext.setValue(nextValue, createRemoveEventDetails(event));
|
|
176
|
+
},
|
|
177
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.XIcon, { className: "size-3" })
|
|
178
|
+
})]
|
|
179
|
+
}, index);
|
|
180
|
+
};
|
|
181
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
182
|
+
ref: containerRef,
|
|
183
|
+
className: "relative flex min-w-0 flex-1 items-center gap-1 overflow-hidden",
|
|
184
|
+
children: [
|
|
185
|
+
visibleItemValues.map((itemValue, index) => renderValueBadge(itemValue, labels[index], index)),
|
|
186
|
+
hiddenCount > 0 ? renderOverflowContent(hiddenCount) : null,
|
|
187
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
188
|
+
ref: measureRef,
|
|
189
|
+
"aria-hidden": "true",
|
|
190
|
+
className: "pointer-events-none invisible absolute flex items-center gap-1 whitespace-nowrap",
|
|
191
|
+
children: [values.map((itemValue, index) => renderValueBadge(itemValue, labels[index], index, true)), values.map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
192
|
+
"data-select-summary-measure": "",
|
|
193
|
+
className: "inline-flex shrink-0",
|
|
194
|
+
children: renderOverflowContent(index + 1)
|
|
195
|
+
}, index))]
|
|
196
|
+
})
|
|
197
|
+
]
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/select/index.tsx
|
|
202
|
+
function Select({ value, defaultValue, onValueChange, items, multiple, disabled, readOnly, itemToStringLabel, isItemEqualToValue, ...props }) {
|
|
203
|
+
const isControlled = value !== void 0;
|
|
204
|
+
const [uncontrolledValue, setUncontrolledValue] = react.useState(() => defaultValue ?? (multiple ? [] : null));
|
|
205
|
+
const currentValue = isControlled ? value : uncontrolledValue;
|
|
206
|
+
const handleValueChange = react.useCallback((nextValue, eventDetails) => {
|
|
207
|
+
onValueChange?.(nextValue, eventDetails);
|
|
208
|
+
if (!isControlled && !eventDetails.isCanceled) setUncontrolledValue(nextValue);
|
|
209
|
+
}, [isControlled, onValueChange]);
|
|
210
|
+
const contextValue = react.useMemo(() => ({
|
|
211
|
+
disabled,
|
|
212
|
+
isItemEqualToValue,
|
|
213
|
+
itemToStringLabel,
|
|
214
|
+
items,
|
|
215
|
+
multiple,
|
|
216
|
+
readOnly,
|
|
217
|
+
setValue: handleValueChange
|
|
218
|
+
}), [
|
|
219
|
+
disabled,
|
|
220
|
+
handleValueChange,
|
|
221
|
+
isItemEqualToValue,
|
|
222
|
+
itemToStringLabel,
|
|
223
|
+
items,
|
|
224
|
+
multiple,
|
|
225
|
+
readOnly
|
|
226
|
+
]);
|
|
227
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectContext.Provider, {
|
|
228
|
+
value: contextValue,
|
|
229
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Root, {
|
|
230
|
+
value: currentValue,
|
|
231
|
+
onValueChange: handleValueChange,
|
|
232
|
+
items,
|
|
233
|
+
multiple,
|
|
234
|
+
disabled,
|
|
235
|
+
readOnly,
|
|
236
|
+
itemToStringLabel,
|
|
237
|
+
isItemEqualToValue,
|
|
238
|
+
...props
|
|
239
|
+
})
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function SelectGroup({ className, ...props }) {
|
|
243
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Group, {
|
|
244
|
+
"data-slot": "select-group",
|
|
245
|
+
className: require_utils.cn("scroll-my-1 p-1", className),
|
|
246
|
+
...props
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function SelectValue({ className, children, placeholder, renderOverflow, ...props }) {
|
|
250
|
+
const shouldRenderMultipleBadges = react.useContext(SelectContext)?.multiple && children == null;
|
|
251
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Value, {
|
|
252
|
+
"data-slot": "select-value",
|
|
253
|
+
className: require_utils.cn("flex min-w-0 flex-1 flex-wrap text-start", shouldRenderMultipleBadges && "items-center overflow-hidden", className),
|
|
254
|
+
placeholder,
|
|
255
|
+
...props,
|
|
256
|
+
children: shouldRenderMultipleBadges ? (value) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectMultipleValue, {
|
|
257
|
+
placeholder,
|
|
258
|
+
renderOverflow,
|
|
259
|
+
value
|
|
260
|
+
}) : children
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function SelectTrigger({ className, size = "default", children, ...props }) {
|
|
264
|
+
const selectContext = react.useContext(SelectContext);
|
|
265
|
+
const isMultiple = Boolean(selectContext?.multiple);
|
|
266
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_select.Select.Trigger, {
|
|
267
|
+
"data-slot": "select-trigger",
|
|
268
|
+
"data-size": size,
|
|
269
|
+
"data-multiple": isMultiple ? true : void 0,
|
|
270
|
+
className: require_utils.cn("border-input focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit select-none items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pl-2.5 pr-2 text-sm outline-none transition-colors disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", isMultiple ? "h-auto min-h-8 whitespace-normal py-1.5 *:data-[slot=select-value]:line-clamp-none" : "whitespace-nowrap data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1", className),
|
|
271
|
+
...props,
|
|
272
|
+
children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Icon, { render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDownIcon, { className: "text-muted-foreground pointer-events-none size-4" }) })]
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = false, ...props }) {
|
|
276
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Positioner, {
|
|
277
|
+
side,
|
|
278
|
+
sideOffset,
|
|
279
|
+
align,
|
|
280
|
+
alignOffset,
|
|
281
|
+
alignItemWithTrigger,
|
|
282
|
+
className: "isolate z-50",
|
|
283
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_select.Select.Popup, {
|
|
284
|
+
"data-slot": "select-content",
|
|
285
|
+
"data-align-trigger": alignItemWithTrigger,
|
|
286
|
+
className: require_utils.cn("max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative isolate z-50 min-w-36 overflow-y-auto overflow-x-hidden rounded-lg shadow-md ring-1 duration-100 data-[align-trigger=true]:animate-none", className),
|
|
287
|
+
...props,
|
|
288
|
+
children: [
|
|
289
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectScrollUpButton, {}),
|
|
290
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.List, { children }),
|
|
291
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectScrollDownButton, {})
|
|
292
|
+
]
|
|
293
|
+
})
|
|
294
|
+
}) });
|
|
295
|
+
}
|
|
296
|
+
function SelectLabel({ className, ...props }) {
|
|
297
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.GroupLabel, {
|
|
298
|
+
"data-slot": "select-label",
|
|
299
|
+
className: require_utils.cn("text-muted-foreground px-1.5 py-1 text-xs", className),
|
|
300
|
+
...props
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
function SelectItem({ className, children, ...props }) {
|
|
304
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_select.Select.Item, {
|
|
305
|
+
"data-slot": "select-item",
|
|
306
|
+
className: require_utils.cn("outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default select-none items-center gap-1.5 rounded-md py-1 pl-1.5 pr-8 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
|
|
307
|
+
...props,
|
|
308
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.ItemText, {
|
|
309
|
+
className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
|
|
310
|
+
children
|
|
311
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.ItemIndicator, { render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
312
|
+
className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center",
|
|
313
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckIcon, { className: "pointer-events-none" })
|
|
314
|
+
}) })]
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
function SelectSeparator({ className, ...props }) {
|
|
318
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.Separator, {
|
|
319
|
+
"data-slot": "select-separator",
|
|
320
|
+
className: require_utils.cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
|
|
321
|
+
...props
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
function SelectScrollUpButton({ className, ...props }) {
|
|
325
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.ScrollUpArrow, {
|
|
326
|
+
"data-slot": "select-scroll-up-button",
|
|
327
|
+
className: require_utils.cn("bg-popover top-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4", className),
|
|
328
|
+
...props,
|
|
329
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUpIcon, {})
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
function SelectScrollDownButton({ className, ...props }) {
|
|
333
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.ScrollDownArrow, {
|
|
334
|
+
"data-slot": "select-scroll-down-button",
|
|
335
|
+
className: require_utils.cn("bg-popover bottom-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4", className),
|
|
336
|
+
...props,
|
|
337
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDownIcon, {})
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
//#endregion
|
|
341
|
+
Object.defineProperty(exports, "Select", {
|
|
342
|
+
enumerable: true,
|
|
343
|
+
get: function() {
|
|
344
|
+
return Select;
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
Object.defineProperty(exports, "SelectContent", {
|
|
348
|
+
enumerable: true,
|
|
349
|
+
get: function() {
|
|
350
|
+
return SelectContent;
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
Object.defineProperty(exports, "SelectGroup", {
|
|
354
|
+
enumerable: true,
|
|
355
|
+
get: function() {
|
|
356
|
+
return SelectGroup;
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
Object.defineProperty(exports, "SelectItem", {
|
|
360
|
+
enumerable: true,
|
|
361
|
+
get: function() {
|
|
362
|
+
return SelectItem;
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
Object.defineProperty(exports, "SelectLabel", {
|
|
366
|
+
enumerable: true,
|
|
367
|
+
get: function() {
|
|
368
|
+
return SelectLabel;
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
Object.defineProperty(exports, "SelectScrollDownButton", {
|
|
372
|
+
enumerable: true,
|
|
373
|
+
get: function() {
|
|
374
|
+
return SelectScrollDownButton;
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
Object.defineProperty(exports, "SelectScrollUpButton", {
|
|
378
|
+
enumerable: true,
|
|
379
|
+
get: function() {
|
|
380
|
+
return SelectScrollUpButton;
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
Object.defineProperty(exports, "SelectSeparator", {
|
|
384
|
+
enumerable: true,
|
|
385
|
+
get: function() {
|
|
386
|
+
return SelectSeparator;
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
Object.defineProperty(exports, "SelectTrigger", {
|
|
390
|
+
enumerable: true,
|
|
391
|
+
get: function() {
|
|
392
|
+
return SelectTrigger;
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
Object.defineProperty(exports, "SelectValue", {
|
|
396
|
+
enumerable: true,
|
|
397
|
+
get: function() {
|
|
398
|
+
return SelectValue;
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
//# sourceMappingURL=select---wbqUEL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select---wbqUEL.js","names":[],"sources":["../src/select/context.ts","../src/select/utils.ts","../src/select/SelectMultipleValue.tsx","../src/select/index.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport type { SelectContextValue } from \"./type\";\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nexport { SelectContext };\n","import { Select as SelectPrimitive } from \"@base-ui/react/select\";\nimport * as React from \"react\";\n\nimport type {\n SelectContextValue,\n SelectGroupItem,\n SelectLabeledItem,\n} from \"./type\";\n\nfunction isGroupedItems(\n items: ReadonlyArray<SelectLabeledItem | SelectGroupItem> | undefined,\n): items is ReadonlyArray<SelectGroupItem> {\n return (\n items != null &&\n items.length > 0 &&\n typeof items[0] === \"object\" &&\n items[0] != null &&\n \"items\" in items[0]\n );\n}\n\nfunction stringifyAsLabel(\n value: unknown,\n itemToStringLabel?: (itemValue: unknown) => string,\n) {\n if (itemToStringLabel && value != null) {\n return itemToStringLabel(value) ?? \"\";\n }\n\n if (value && typeof value === \"object\") {\n if (\"label\" in value && value.label != null) {\n return String(value.label);\n }\n\n if (\"value\" in value) {\n return String(value.value);\n }\n }\n\n return String(value ?? \"\");\n}\n\nfunction resolveSelectedLabel(\n value: unknown,\n { items, itemToStringLabel, isItemEqualToValue }: SelectContextValue,\n) {\n const fallback = () => stringifyAsLabel(value, itemToStringLabel);\n\n if (itemToStringLabel && value != null) {\n return itemToStringLabel(value);\n }\n\n if (value && typeof value === \"object\" && \"label\" in value) {\n return value.label as React.ReactNode;\n }\n\n if (items && !Array.isArray(items)) {\n return (\n (items as Record<string, React.ReactNode>)[String(value)] ?? fallback()\n );\n }\n\n if (Array.isArray(items)) {\n const flatItems = isGroupedItems(items)\n ? items.flatMap((group) => group.items)\n : items;\n\n const match = flatItems.find((item) => {\n if (isItemEqualToValue?.(item.value, value)) {\n return true;\n }\n\n if (Object.is(item.value, value)) {\n return true;\n }\n\n return (\n value != null &&\n typeof value === \"object\" &&\n \"value\" in value &&\n Object.is(item.value, value.value)\n );\n });\n\n return match?.label ?? fallback();\n }\n\n return fallback();\n}\n\nfunction resolveSelectedItem(\n value: unknown,\n selectContext: SelectContextValue,\n): SelectLabeledItem {\n const { items, isItemEqualToValue } = selectContext;\n const fallback = (): SelectLabeledItem => ({\n label: resolveSelectedLabel(value, selectContext),\n value,\n });\n\n if (items && !Array.isArray(items)) {\n return {\n label:\n (items as Record<string, React.ReactNode>)[String(value)] ??\n fallback().label,\n value,\n };\n }\n\n if (Array.isArray(items)) {\n const flatItems = isGroupedItems(items)\n ? items.flatMap((group) => group.items)\n : items;\n\n const match = flatItems.find((item) => {\n if (isItemEqualToValue?.(item.value, value)) {\n return true;\n }\n\n if (Object.is(item.value, value)) {\n return true;\n }\n\n return (\n value != null &&\n typeof value === \"object\" &&\n \"value\" in value &&\n Object.is(item.value, value.value)\n );\n });\n\n if (match) {\n return match;\n }\n }\n\n return fallback();\n}\n\nfunction reactNodeToString(node: React.ReactNode) {\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n return \"选项\";\n}\n\nfunction createRemoveEventDetails(\n event: React.MouseEvent,\n): SelectPrimitive.Root.ChangeEventDetails {\n let isCanceled = false;\n let isPropagationAllowed = false;\n\n return {\n reason: \"item-press\",\n event: event.nativeEvent,\n trigger: event.currentTarget,\n cancel: () => {\n isCanceled = true;\n },\n allowPropagation: () => {\n isPropagationAllowed = true;\n },\n get isCanceled() {\n return isCanceled;\n },\n get isPropagationAllowed() {\n return isPropagationAllowed;\n },\n };\n}\n\nexport {\n createRemoveEventDetails,\n reactNodeToString,\n resolveSelectedItem,\n resolveSelectedLabel,\n};\n","import { XIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Badge } from \"../badge\";\nimport { SelectContext } from \"./context\";\nimport type { SelectValueProps } from \"./type\";\nimport {\n createRemoveEventDetails,\n reactNodeToString,\n resolveSelectedItem,\n resolveSelectedLabel,\n} from \"./utils\";\n\nfunction SelectMultipleValue({\n placeholder,\n renderOverflow,\n value,\n}: {\n placeholder?: React.ReactNode;\n renderOverflow?: SelectValueProps[\"renderOverflow\"];\n value: unknown;\n}) {\n const selectContext = React.useContext(SelectContext);\n const containerRef = React.useRef<HTMLSpanElement>(null);\n const measureRef = React.useRef<HTMLSpanElement>(null);\n const values = React.useMemo(\n () => (Array.isArray(value) ? value : []),\n [value],\n );\n const [visibleCount, setVisibleCount] = React.useState(values.length);\n\n const updateVisibleCount = React.useCallback(() => {\n const container = containerRef.current;\n\n if (!container || values.length === 0) {\n setVisibleCount(values.length);\n return;\n }\n\n const containerWidth = container.clientWidth;\n const gap = Number.parseFloat(getComputedStyle(container).columnGap) || 0;\n const itemWidths = Array.from(\n measureRef.current?.querySelectorAll<HTMLElement>(\n \"[data-select-value-measure]\",\n ) ?? [],\n (element) => element.offsetWidth,\n );\n const summaryWidths = Array.from(\n measureRef.current?.querySelectorAll<HTMLElement>(\n \"[data-select-summary-measure]\",\n ) ?? [],\n (element) => element.offsetWidth,\n );\n\n let nextVisibleCount = 0;\n\n for (let count = values.length; count >= 0; count -= 1) {\n const hiddenCount = values.length - count;\n const selectedWidth = itemWidths\n .slice(0, count)\n .reduce((total, width) => total + width, 0);\n const summaryWidth =\n hiddenCount > 0 ? (summaryWidths[hiddenCount - 1] ?? 0) : 0;\n const itemsCount = count + (hiddenCount > 0 ? 1 : 0);\n const totalGap = Math.max(itemsCount - 1, 0) * gap;\n\n if (selectedWidth + summaryWidth + totalGap <= containerWidth) {\n nextVisibleCount = count;\n break;\n }\n }\n\n setVisibleCount(nextVisibleCount);\n }, [values]);\n\n React.useLayoutEffect(() => {\n updateVisibleCount();\n\n const container = containerRef.current;\n\n if (!container) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(updateVisibleCount);\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [updateVisibleCount]);\n\n if (!selectContext || values.length === 0) {\n return placeholder ? (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n ) : null;\n }\n\n const labels = values.map((itemValue) =>\n resolveSelectedLabel(itemValue, selectContext),\n );\n const selectedItems = values.map((itemValue) =>\n resolveSelectedItem(itemValue, selectContext),\n );\n const visibleItemValues = values.slice(0, visibleCount);\n const hiddenCount = values.length - visibleCount;\n const renderOverflowContent = (count: number) => {\n const hiddenItems = selectedItems.slice(values.length - count);\n const visibleItems = selectedItems.slice(0, values.length - count);\n\n if (renderOverflow) {\n return renderOverflow({\n hiddenCount: count,\n hiddenValues: hiddenItems,\n visibleValues: visibleItems,\n });\n }\n\n return (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n +{count}...\n </Badge>\n );\n };\n\n const renderValueBadge = (\n itemValue: unknown,\n label: React.ReactNode,\n index: number,\n measure?: boolean,\n ) => {\n const labelText = reactNodeToString(label);\n\n return (\n <Badge\n key={index}\n data-select-value-measure={measure ? \"\" : undefined}\n variant=\"secondary\"\n className=\"max-w-full shrink-0\"\n >\n <span className=\"truncate\">{label}</span>\n <span\n aria-label={`移除${labelText}`}\n data-icon=\"inline-end\"\n role=\"button\"\n className=\"hover:bg-muted-foreground/20 inline-flex size-3.5 cursor-pointer items-center justify-center rounded-full transition\"\n onPointerDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (selectContext.disabled || selectContext.readOnly) {\n return;\n }\n\n const nextValue = values.filter((selectedValue) => {\n if (\n selectContext.isItemEqualToValue?.(itemValue, selectedValue)\n ) {\n return false;\n }\n\n return !Object.is(selectedValue, itemValue);\n });\n\n selectContext.setValue(nextValue, createRemoveEventDetails(event));\n }}\n >\n <XIcon className=\"size-3\" />\n </span>\n </Badge>\n );\n };\n\n return (\n <span\n ref={containerRef}\n className=\"relative flex min-w-0 flex-1 items-center gap-1 overflow-hidden\"\n >\n {visibleItemValues.map((itemValue, index) =>\n renderValueBadge(itemValue, labels[index], index),\n )}\n {hiddenCount > 0 ? renderOverflowContent(hiddenCount) : null}\n <span\n ref={measureRef}\n aria-hidden=\"true\"\n className=\"pointer-events-none invisible absolute flex items-center gap-1 whitespace-nowrap\"\n >\n {values.map((itemValue, index) =>\n renderValueBadge(itemValue, labels[index], index, true),\n )}\n {values.map((_, index) => (\n <span\n key={index}\n data-select-summary-measure=\"\"\n className=\"inline-flex shrink-0\"\n >\n {renderOverflowContent(index + 1)}\n </span>\n ))}\n </span>\n </span>\n );\n}\n\nexport { SelectMultipleValue };\n","\"use client\";\n\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib\";\nimport { SelectContext } from \"./context\";\nimport { SelectMultipleValue } from \"./SelectMultipleValue\";\nimport type {\n SelectContextValue,\n SelectValueOverflowRenderInfo,\n SelectValueProps,\n} from \"./type\";\n\nfunction Select<Value, Multiple extends boolean | undefined = false>({\n value,\n defaultValue,\n onValueChange,\n items,\n multiple,\n disabled,\n readOnly,\n itemToStringLabel,\n isItemEqualToValue,\n ...props\n}: SelectPrimitive.Root.Props<Value, Multiple>) {\n const isControlled = value !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = React.useState<unknown>(\n () => defaultValue ?? (multiple ? [] : null),\n );\n const currentValue = isControlled ? value : uncontrolledValue;\n\n const handleValueChange = React.useCallback(\n (\n nextValue: SelectPrimitive.Root.Props<Value, Multiple>[\"value\"],\n eventDetails: SelectPrimitive.Root.ChangeEventDetails,\n ) => {\n onValueChange?.(\n nextValue as Parameters<NonNullable<typeof onValueChange>>[0],\n eventDetails,\n );\n\n if (!isControlled && !eventDetails.isCanceled) {\n setUncontrolledValue(nextValue);\n }\n },\n [isControlled, onValueChange],\n );\n\n const contextValue = React.useMemo<SelectContextValue>(\n () => ({\n disabled,\n isItemEqualToValue:\n isItemEqualToValue as SelectContextValue[\"isItemEqualToValue\"],\n itemToStringLabel:\n itemToStringLabel as SelectContextValue[\"itemToStringLabel\"],\n items,\n multiple,\n readOnly,\n setValue: handleValueChange as SelectContextValue[\"setValue\"],\n }),\n [\n disabled,\n handleValueChange,\n isItemEqualToValue,\n itemToStringLabel,\n items,\n multiple,\n readOnly,\n ],\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <SelectPrimitive.Root\n value={\n currentValue as SelectPrimitive.Root.Props<Value, Multiple>[\"value\"]\n }\n onValueChange={handleValueChange}\n items={items}\n multiple={multiple}\n disabled={disabled}\n readOnly={readOnly}\n itemToStringLabel={itemToStringLabel}\n isItemEqualToValue={isItemEqualToValue}\n {...props}\n />\n </SelectContext.Provider>\n );\n}\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({\n className,\n children,\n placeholder,\n renderOverflow,\n ...props\n}: SelectValueProps) {\n const selectContext = React.useContext(SelectContext);\n const shouldRenderMultipleBadges =\n selectContext?.multiple && children == null;\n\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\n \"flex min-w-0 flex-1 flex-wrap text-start\",\n shouldRenderMultipleBadges && \"items-center overflow-hidden\",\n className,\n )}\n placeholder={placeholder}\n {...props}\n >\n {shouldRenderMultipleBadges\n ? (value) => (\n <SelectMultipleValue\n placeholder={placeholder}\n renderOverflow={renderOverflow}\n value={value}\n />\n )\n : children}\n </SelectPrimitive.Value>\n );\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\";\n}) {\n const selectContext = React.useContext(SelectContext);\n const isMultiple = Boolean(selectContext?.multiple);\n\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n data-multiple={isMultiple ? true : undefined}\n className={cn(\n \"border-input focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit select-none items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pl-2.5 pr-2 text-sm outline-none transition-colors disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n isMultiple\n ? \"h-auto min-h-8 whitespace-normal py-1.5 *:data-[slot=select-value]:line-clamp-none\"\n : \"whitespace-nowrap data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4\" />\n }\n />\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = false,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n data-align-trigger={alignItemWithTrigger}\n className={cn(\n \"max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative isolate z-50 min-w-36 overflow-y-auto overflow-x-hidden rounded-lg shadow-md ring-1 duration-100 data-[align-trigger=true]:animate-none\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-1.5 py-1 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default select-none items-center gap-1.5 rounded-md py-1 pl-1.5 pr-8 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 shrink-0 gap-2 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\">\n <CheckIcon className=\"pointer-events-none\" />\n </span>\n }\n />\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"bg-popover top-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpArrow>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"bg-popover bottom-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownArrow>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n\nexport type { SelectValueOverflowRenderInfo, SelectValueProps };\n"],"mappings":"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"}
|