one-design-next 0.0.97 → 0.0.99

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.
@@ -14,11 +14,11 @@ var _excluded = ["asChild", "children"],
14
14
  _excluded2 = ["sideOffset", "children", "matchWidth", "zIndex", "style", "className", "onCloseAutoFocus", "side", "align"],
15
15
  _excluded3 = ["style"],
16
16
  _excluded4 = ["inset", "variant", "onSelect", "closeOnClick", "onClick"],
17
- _excluded5 = ["children", "checked"],
18
- _excluded6 = ["children"],
17
+ _excluded5 = ["children", "checked", "disabled"],
18
+ _excluded6 = ["children", "disabled"],
19
19
  _excluded7 = ["inset", "children"],
20
20
  _excluded8 = ["onOpenChange"],
21
- _excluded9 = ["inset", "children"],
21
+ _excluded9 = ["inset", "icon", "children"],
22
22
  _excluded10 = ["sideOffset", "side", "align", "children", "zIndex", "style"],
23
23
  _excluded11 = ["style"];
24
24
  import { Menu } from '@base-ui/react/menu';
@@ -26,26 +26,35 @@ import { Slot } from '@radix-ui/react-slot';
26
26
  import * as React from 'react';
27
27
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
28
28
  import Checkbox from "../checkbox";
29
+ import HoverFill from "../hover-fill";
29
30
  import Icon from "../icon";
30
31
  import Radio from "../radio";
31
32
  import ScrollArea from "../scroll-area";
32
33
  import "./style";
34
+ function DropdownItemHoverFill(_ref) {
35
+ var disabled = _ref.disabled,
36
+ children = _ref.children;
37
+ return /*#__PURE__*/React.createElement(HoverFill, {
38
+ bgClassName: "odn-dropdown-item-bg",
39
+ disabled: disabled
40
+ }, children);
41
+ }
33
42
 
34
43
  // 基础组件定义 — Base UI Menu(原 Radix DropdownMenu 结构对齐)
35
- function DropdownMenu(_ref) {
36
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref), _ref));
44
+ function DropdownMenu(_ref2) {
45
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref2), _ref2));
37
46
  return /*#__PURE__*/React.createElement(Menu.Root, props);
38
47
  }
39
- function DropdownMenuPortal(_ref2) {
40
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref2), _ref2));
48
+ function DropdownMenuPortal(_ref3) {
49
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref3), _ref3));
41
50
  return /*#__PURE__*/React.createElement(Menu.Portal, _extends({
42
51
  "data-slot": "dropdown-menu-portal"
43
52
  }, props));
44
53
  }
45
- var DropdownMenuTrigger = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
46
- var asChild = _ref3.asChild,
47
- children = _ref3.children,
48
- props = _objectWithoutProperties(_ref3, _excluded);
54
+ var DropdownMenuTrigger = /*#__PURE__*/React.forwardRef(function (_ref4, ref) {
55
+ var asChild = _ref4.asChild,
56
+ children = _ref4.children,
57
+ props = _objectWithoutProperties(_ref4, _excluded);
49
58
  if (asChild && /*#__PURE__*/React.isValidElement(children)) {
50
59
  var nativeButton = typeof children.type === 'string' && children.type === 'button';
51
60
  return /*#__PURE__*/React.createElement(Menu.Trigger, _extends({
@@ -62,24 +71,25 @@ var DropdownMenuTrigger = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
62
71
  }, props), children);
63
72
  });
64
73
  DropdownMenuTrigger.displayName = 'DropdownMenuTrigger';
65
- var DropdownMenuContent = /*#__PURE__*/React.forwardRef(function (_ref4, ref) {
66
- var _ref4$sideOffset = _ref4.sideOffset,
67
- sideOffset = _ref4$sideOffset === void 0 ? 4 : _ref4$sideOffset,
68
- children = _ref4.children,
69
- matchWidth = _ref4.matchWidth,
70
- _ref4$zIndex = _ref4.zIndex,
71
- zIndex = _ref4$zIndex === void 0 ? 'var(--odn-z-index-select)' : _ref4$zIndex,
72
- style = _ref4.style,
73
- className = _ref4.className,
74
- _onCloseAutoFocus = _ref4.onCloseAutoFocus,
75
- _ref4$side = _ref4.side,
76
- side = _ref4$side === void 0 ? 'bottom' : _ref4$side,
77
- _ref4$align = _ref4.align,
78
- align = _ref4$align === void 0 ? 'center' : _ref4$align,
79
- rest = _objectWithoutProperties(_ref4, _excluded2);
80
- var _ref5 = rest,
81
- restPopupStyle = _ref5.style,
82
- popupRest = _objectWithoutProperties(_ref5, _excluded3);
74
+ var DropdownMenuContent = /*#__PURE__*/React.forwardRef(function (_ref5, ref) {
75
+ var _ref5$sideOffset = _ref5.sideOffset,
76
+ sideOffset = _ref5$sideOffset === void 0 ? 4 : _ref5$sideOffset,
77
+ children = _ref5.children,
78
+ matchWidth = _ref5.matchWidth,
79
+ _ref5$zIndex = _ref5.zIndex,
80
+ zIndex = _ref5$zIndex === void 0 ? 'var(--odn-z-index-select)' : _ref5$zIndex,
81
+ style = _ref5.style,
82
+ className = _ref5.className,
83
+ onCloseAutoFocus = _ref5.onCloseAutoFocus,
84
+ _ref5$side = _ref5.side,
85
+ side = _ref5$side === void 0 ? 'bottom' : _ref5$side,
86
+ _ref5$align = _ref5.align,
87
+ align = _ref5$align === void 0 ? 'center' : _ref5$align,
88
+ rest = _objectWithoutProperties(_ref5, _excluded2);
89
+ void onCloseAutoFocus;
90
+ var _ref6 = rest,
91
+ restPopupStyle = _ref6.style,
92
+ popupRest = _objectWithoutProperties(_ref6, _excluded3);
83
93
  return /*#__PURE__*/React.createElement(Menu.Portal, null, /*#__PURE__*/React.createElement(Menu.Positioner, {
84
94
  side: side,
85
95
  align: align,
@@ -103,22 +113,24 @@ var DropdownMenuContent = /*#__PURE__*/React.forwardRef(function (_ref4, ref) {
103
113
  }, children))));
104
114
  });
105
115
  DropdownMenuContent.displayName = 'DropdownMenuContent';
106
- function DropdownMenuGroup(_ref6) {
107
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref6), _ref6));
116
+ function DropdownMenuGroup(_ref7) {
117
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref7), _ref7));
108
118
  return /*#__PURE__*/React.createElement(Menu.Group, _extends({
109
119
  "data-slot": "dropdown-menu-group"
110
120
  }, props));
111
121
  }
112
- var DropdownMenuItem = /*#__PURE__*/React.forwardRef(function (_ref7, ref) {
113
- var inset = _ref7.inset,
114
- _ref7$variant = _ref7.variant,
115
- variant = _ref7$variant === void 0 ? 'default' : _ref7$variant,
116
- onSelect = _ref7.onSelect,
117
- _ref7$closeOnClick = _ref7.closeOnClick,
118
- closeOnClick = _ref7$closeOnClick === void 0 ? true : _ref7$closeOnClick,
119
- _onClick = _ref7.onClick,
120
- props = _objectWithoutProperties(_ref7, _excluded4);
121
- return /*#__PURE__*/React.createElement(Menu.Item, _extends({
122
+ var DropdownMenuItem = /*#__PURE__*/React.forwardRef(function (_ref8, ref) {
123
+ var inset = _ref8.inset,
124
+ _ref8$variant = _ref8.variant,
125
+ variant = _ref8$variant === void 0 ? 'default' : _ref8$variant,
126
+ onSelect = _ref8.onSelect,
127
+ _ref8$closeOnClick = _ref8.closeOnClick,
128
+ closeOnClick = _ref8$closeOnClick === void 0 ? true : _ref8$closeOnClick,
129
+ _onClick = _ref8.onClick,
130
+ props = _objectWithoutProperties(_ref8, _excluded4);
131
+ return /*#__PURE__*/React.createElement(DropdownItemHoverFill, {
132
+ disabled: props.disabled
133
+ }, /*#__PURE__*/React.createElement(Menu.Item, _extends({
122
134
  ref: ref,
123
135
  "data-slot": "dropdown-menu-item",
124
136
  "data-odn-dropdown-item": true,
@@ -129,64 +141,72 @@ var DropdownMenuItem = /*#__PURE__*/React.forwardRef(function (_ref7, ref) {
129
141
  _onClick === null || _onClick === void 0 || _onClick(event);
130
142
  onSelect === null || onSelect === void 0 || onSelect(event);
131
143
  }
132
- }, props));
144
+ }, props)));
133
145
  });
134
146
  DropdownMenuItem.displayName = 'DropdownMenuItem';
135
- function DropdownMenuCheckboxItem(_ref8) {
136
- var children = _ref8.children,
137
- checked = _ref8.checked,
138
- props = _objectWithoutProperties(_ref8, _excluded5);
139
- return /*#__PURE__*/React.createElement(Menu.CheckboxItem, _extends({
147
+ function DropdownMenuCheckboxItem(_ref9) {
148
+ var children = _ref9.children,
149
+ checked = _ref9.checked,
150
+ disabled = _ref9.disabled,
151
+ props = _objectWithoutProperties(_ref9, _excluded5);
152
+ return /*#__PURE__*/React.createElement(DropdownItemHoverFill, {
153
+ disabled: disabled
154
+ }, /*#__PURE__*/React.createElement(Menu.CheckboxItem, _extends({
140
155
  "data-slot": "dropdown-menu-checkbox-item",
141
156
  "data-odn-dropdown-checkbox-item": true,
142
- checked: checked
157
+ checked: checked,
158
+ disabled: disabled
143
159
  }, props), /*#__PURE__*/React.createElement("span", {
144
160
  "data-odn-dropdown-item-indicator": true
145
- }, /*#__PURE__*/React.createElement(Menu.CheckboxItemIndicator, null, "\u2713")), children);
161
+ }, /*#__PURE__*/React.createElement(Menu.CheckboxItemIndicator, null, "\u2713")), children));
146
162
  }
147
- function DropdownMenuRadioGroup(_ref9) {
148
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref9), _ref9));
163
+ function DropdownMenuRadioGroup(_ref10) {
164
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref10), _ref10));
149
165
  return /*#__PURE__*/React.createElement(Menu.RadioGroup, _extends({
150
166
  "data-slot": "dropdown-menu-radio-group"
151
167
  }, props));
152
168
  }
153
- function DropdownMenuRadioItem(_ref10) {
154
- var children = _ref10.children,
155
- props = _objectWithoutProperties(_ref10, _excluded6);
156
- return /*#__PURE__*/React.createElement(Menu.RadioItem, _extends({
169
+ function DropdownMenuRadioItem(_ref11) {
170
+ var children = _ref11.children,
171
+ disabled = _ref11.disabled,
172
+ props = _objectWithoutProperties(_ref11, _excluded6);
173
+ return /*#__PURE__*/React.createElement(DropdownItemHoverFill, {
174
+ disabled: disabled
175
+ }, /*#__PURE__*/React.createElement(Menu.RadioItem, _extends({
157
176
  "data-slot": "dropdown-menu-radio-item",
158
- "data-odn-dropdown-radio-item": true
177
+ "data-odn-dropdown-radio-item": true,
178
+ disabled: disabled
159
179
  }, props), /*#__PURE__*/React.createElement("span", {
160
180
  "data-odn-dropdown-item-indicator": true
161
- }, /*#__PURE__*/React.createElement(Menu.RadioItemIndicator, null, "\u25CF")), children);
181
+ }, /*#__PURE__*/React.createElement(Menu.RadioItemIndicator, null, "\u25CF")), children));
162
182
  }
163
- function DropdownMenuLabel(_ref11) {
164
- var inset = _ref11.inset,
165
- children = _ref11.children,
166
- props = _objectWithoutProperties(_ref11, _excluded7);
183
+ function DropdownMenuLabel(_ref12) {
184
+ var inset = _ref12.inset,
185
+ children = _ref12.children,
186
+ props = _objectWithoutProperties(_ref12, _excluded7);
167
187
  return /*#__PURE__*/React.createElement(Menu.Group, null, /*#__PURE__*/React.createElement(Menu.GroupLabel, _extends({
168
188
  "data-slot": "dropdown-menu-label",
169
189
  "data-odn-dropdown-label": true,
170
190
  "data-inset": inset
171
191
  }, props), children));
172
192
  }
173
- function DropdownMenuSeparator(_ref12) {
174
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref12), _ref12));
193
+ function DropdownMenuSeparator(_ref13) {
194
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref13), _ref13));
175
195
  return /*#__PURE__*/React.createElement(Menu.Separator, _extends({
176
196
  "data-slot": "dropdown-menu-separator",
177
197
  "data-odn-dropdown-separator": true
178
198
  }, props));
179
199
  }
180
- function DropdownMenuShortcut(_ref13) {
181
- var props = Object.assign({}, (_objectDestructuringEmpty(_ref13), _ref13));
200
+ function DropdownMenuShortcut(_ref14) {
201
+ var props = Object.assign({}, (_objectDestructuringEmpty(_ref14), _ref14));
182
202
  return /*#__PURE__*/React.createElement("span", _extends({
183
203
  "data-slot": "dropdown-menu-shortcut",
184
204
  "data-odn-dropdown-shortcut": true
185
205
  }, props));
186
206
  }
187
- function DropdownMenuSub(_ref14) {
188
- var onOpenChange = _ref14.onOpenChange,
189
- props = _objectWithoutProperties(_ref14, _excluded8);
207
+ function DropdownMenuSub(_ref15) {
208
+ var onOpenChange = _ref15.onOpenChange,
209
+ props = _objectWithoutProperties(_ref15, _excluded8);
190
210
  return /*#__PURE__*/React.createElement(Menu.SubmenuRoot, _extends({
191
211
  "data-slot": "dropdown-menu-sub"
192
212
  }, props, {
@@ -195,16 +215,20 @@ function DropdownMenuSub(_ref14) {
195
215
  } : undefined
196
216
  }));
197
217
  }
198
- var DropdownMenuSubTrigger = /*#__PURE__*/React.forwardRef(function (_ref15, ref) {
199
- var inset = _ref15.inset,
200
- children = _ref15.children,
201
- props = _objectWithoutProperties(_ref15, _excluded9);
218
+ var DropdownMenuSubTrigger = /*#__PURE__*/React.forwardRef(function (_ref16, ref) {
219
+ var inset = _ref16.inset,
220
+ icon = _ref16.icon,
221
+ children = _ref16.children,
222
+ props = _objectWithoutProperties(_ref16, _excluded9);
202
223
  return /*#__PURE__*/React.createElement(Menu.SubmenuTrigger, _extends({
203
224
  ref: ref,
204
225
  "data-slot": "dropdown-menu-sub-trigger",
205
226
  "data-odn-dropdown-sub-trigger": true,
206
227
  "data-inset": inset
207
- }, props), /*#__PURE__*/React.createElement("div", {
228
+ }, props), icon && /*#__PURE__*/React.createElement(Icon, {
229
+ name: icon,
230
+ "data-odn-dropdown-item-icon": true
231
+ }), /*#__PURE__*/React.createElement("div", {
208
232
  "data-odn-dropdown-item-label": true
209
233
  }, children), /*#__PURE__*/React.createElement(Icon, {
210
234
  "data-odn-dropdown-chevron": true,
@@ -212,21 +236,21 @@ var DropdownMenuSubTrigger = /*#__PURE__*/React.forwardRef(function (_ref15, ref
212
236
  }));
213
237
  });
214
238
  DropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';
215
- var DropdownMenuSubContent = /*#__PURE__*/React.forwardRef(function (_ref16, ref) {
216
- var _ref16$sideOffset = _ref16.sideOffset,
217
- sideOffset = _ref16$sideOffset === void 0 ? 4 : _ref16$sideOffset,
218
- _ref16$side = _ref16.side,
219
- side = _ref16$side === void 0 ? 'right' : _ref16$side,
220
- _ref16$align = _ref16.align,
221
- align = _ref16$align === void 0 ? 'start' : _ref16$align,
222
- children = _ref16.children,
223
- _ref16$zIndex = _ref16.zIndex,
224
- zIndex = _ref16$zIndex === void 0 ? 'var(--odn-z-index-select)' : _ref16$zIndex,
225
- style = _ref16.style,
226
- rest = _objectWithoutProperties(_ref16, _excluded10);
227
- var _ref17 = rest,
228
- restPopupStyle = _ref17.style,
229
- popupRest = _objectWithoutProperties(_ref17, _excluded11);
239
+ var DropdownMenuSubContent = /*#__PURE__*/React.forwardRef(function (_ref17, ref) {
240
+ var _ref17$sideOffset = _ref17.sideOffset,
241
+ sideOffset = _ref17$sideOffset === void 0 ? 4 : _ref17$sideOffset,
242
+ _ref17$side = _ref17.side,
243
+ side = _ref17$side === void 0 ? 'right' : _ref17$side,
244
+ _ref17$align = _ref17.align,
245
+ align = _ref17$align === void 0 ? 'start' : _ref17$align,
246
+ children = _ref17.children,
247
+ _ref17$zIndex = _ref17.zIndex,
248
+ zIndex = _ref17$zIndex === void 0 ? 'var(--odn-z-index-select)' : _ref17$zIndex,
249
+ style = _ref17.style,
250
+ rest = _objectWithoutProperties(_ref17, _excluded10);
251
+ var _ref18 = rest,
252
+ restPopupStyle = _ref18.style,
253
+ popupRest = _objectWithoutProperties(_ref18, _excluded11);
230
254
  return /*#__PURE__*/React.createElement(Menu.Portal, null, /*#__PURE__*/React.createElement(Menu.Positioner, {
231
255
  side: side,
232
256
  align: align,
@@ -334,8 +358,7 @@ var addSelectAllToMenu = function addSelectAllToMenu(menu, allowSelectAll, isSel
334
358
  };
335
359
 
336
360
  // 递归渲染菜单项的辅助函数
337
- var renderMenuItem = function renderMenuItem(item, index, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex) {
338
- var _item$value2;
361
+ var renderMenuItem = function renderMenuItem(item, index, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex, popupClassName) {
339
362
  var key = 'value' in item && item.value || "item-".concat(index);
340
363
  switch (item.type) {
341
364
  case 'label':
@@ -350,159 +373,167 @@ var renderMenuItem = function renderMenuItem(item, index, _onSelect, onItemClick
350
373
  return /*#__PURE__*/React.createElement(DropdownMenuGroup, {
351
374
  key: key
352
375
  }, item.children.map(function (child, childIndex) {
353
- return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex);
376
+ return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex, popupClassName);
354
377
  }));
355
378
  default:
356
- // 'item' or undefined (DropdownMenuItem)
357
- // 检查是否有 children 属性,如果有则渲染为子菜单
358
- if ('children' in item && item.children && item.children.length > 0) {
359
- // 在多选模式下,带 children 的项目可以选择(全选该子菜单)
360
- if (isSelectable && multiple) {
361
- // 收集该子菜单所有可选择的子项值
362
- var collectChildValues = function collectChildValues(items) {
363
- var values = [];
364
- items.forEach(function (item) {
365
- if ('value' in item && item.value && !item.value.startsWith('selectAll')) {
366
- // 包含当前项的值(无论是否有子项)
367
- values.push(item.value);
368
- }
369
- if ('children' in item && item.children) {
370
- // 如果有子项,递归收集子项
371
- values.push.apply(values, _toConsumableArray(collectChildValues(item.children)));
372
- }
379
+ {
380
+ var _item$value2;
381
+ // 'item' or undefined (DropdownMenuItem)
382
+ // 检查是否有 children 属性,如果有则渲染为子菜单
383
+ if ('children' in item && item.children && item.children.length > 0) {
384
+ // 在多选模式下,带 children 的项目可以选择(全选该子菜单)
385
+ if (isSelectable && multiple) {
386
+ // 收集该子菜单所有可选择的子项值
387
+ var collectChildValues = function collectChildValues(items) {
388
+ var values = [];
389
+ items.forEach(function (item) {
390
+ if ('value' in item && item.value && !item.value.startsWith('selectAll')) {
391
+ // 包含当前项的值(无论是否有子项)
392
+ values.push(item.value);
393
+ }
394
+ if ('children' in item && item.children) {
395
+ // 如果有子项,递归收集子项
396
+ values.push.apply(values, _toConsumableArray(collectChildValues(item.children)));
397
+ }
398
+ });
399
+ return values;
400
+ };
401
+ var childValues = collectChildValues(item.children);
402
+ var allChildrenSelected = Array.isArray(selectedValue) && childValues.length > 0 && childValues.every(function (val) {
403
+ return selectedValue.includes(val);
373
404
  });
374
- return values;
375
- };
376
- var childValues = collectChildValues(item.children);
377
- var allChildrenSelected = Array.isArray(selectedValue) && childValues.length > 0 && childValues.every(function (val) {
378
- return selectedValue.includes(val);
379
- });
380
- return /*#__PURE__*/React.createElement(DropdownMenuSub, {
381
- key: key
382
- }, /*#__PURE__*/React.createElement(DropdownMenuSubTrigger, {
383
- disabled: item.disabled,
384
- onClick: function onClick(event) {
385
- event.preventDefault();
386
- event.stopPropagation();
387
-
388
- // 切换该子菜单的全选状态
389
- var currentValues = Array.isArray(selectedValue) ? selectedValue : [];
390
- var newValues;
391
- if (allChildrenSelected) {
392
- // 如果全选中,则取消选中该子菜单所有项(包括自己)
393
- var allValuesToRemove = _toConsumableArray(childValues);
394
- if (item.value) {
395
- allValuesToRemove.push(item.value);
405
+ return /*#__PURE__*/React.createElement(DropdownItemHoverFill, {
406
+ key: key,
407
+ disabled: item.disabled
408
+ }, /*#__PURE__*/React.createElement(DropdownMenuSub, null, /*#__PURE__*/React.createElement(DropdownMenuSubTrigger, {
409
+ disabled: item.disabled,
410
+ onClick: function onClick(event) {
411
+ event.preventDefault();
412
+ event.stopPropagation();
413
+
414
+ // 切换该子菜单的全选状态
415
+ var currentValues = Array.isArray(selectedValue) ? selectedValue : [];
416
+ var newValues;
417
+ if (allChildrenSelected) {
418
+ // 如果全选中,则取消选中该子菜单所有项(包括自己)
419
+ var allValuesToRemove = _toConsumableArray(childValues);
420
+ if (item.value) {
421
+ allValuesToRemove.push(item.value);
422
+ }
423
+ newValues = currentValues.filter(function (val) {
424
+ return !allValuesToRemove.includes(val);
425
+ });
426
+ } else {
427
+ // 如果未全选中,则选中该子菜单所有项(包括自己)
428
+ var allValuesToAdd = _toConsumableArray(childValues);
429
+ if (item.value) {
430
+ allValuesToAdd.push(item.value);
431
+ }
432
+ var uniqueValues = new Set([].concat(_toConsumableArray(currentValues), _toConsumableArray(allValuesToAdd)));
433
+ newValues = Array.from(uniqueValues);
396
434
  }
397
- newValues = currentValues.filter(function (val) {
398
- return !allValuesToRemove.includes(val);
399
- });
400
- } else {
401
- // 如果未全选中,则选中该子菜单所有项(包括自己)
402
- var allValuesToAdd = _toConsumableArray(childValues);
403
- if (item.value) {
404
- allValuesToAdd.push(item.value);
435
+
436
+ // 直接调用 rawOnSelect
437
+ if (rawOnSelect) {
438
+ rawOnSelect(newValues);
405
439
  }
406
- var uniqueValues = new Set([].concat(_toConsumableArray(currentValues), _toConsumableArray(allValuesToAdd)));
407
- newValues = Array.from(uniqueValues);
408
440
  }
441
+ }, /*#__PURE__*/React.createElement(Checkbox, {
442
+ checked: allChildrenSelected,
443
+ indeterminate: !allChildrenSelected && Array.isArray(selectedValue) && childValues.some(function (val) {
444
+ return selectedValue.includes(val);
445
+ }),
446
+ "data-odn-dropdown-checkbox": true
447
+ }), item.label), /*#__PURE__*/React.createElement(DropdownMenuSubContent, {
448
+ zIndex: menuZIndex,
449
+ className: popupClassName
450
+ }, item.children.map(function (child, childIndex) {
451
+ return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex, popupClassName);
452
+ }))));
453
+ }
409
454
 
410
- // 直接调用 rawOnSelect
411
- if (rawOnSelect) {
412
- rawOnSelect(newValues);
413
- }
414
- }
415
- }, /*#__PURE__*/React.createElement(Checkbox, {
416
- checked: allChildrenSelected,
417
- indeterminate: !allChildrenSelected && Array.isArray(selectedValue) && childValues.some(function (val) {
418
- return selectedValue.includes(val);
419
- }),
420
- "data-odn-dropdown-checkbox": true
421
- }), item.label), /*#__PURE__*/React.createElement(DropdownMenuSubContent, {
422
- zIndex: menuZIndex
455
+ // 普通子菜单渲染(单选模式或非选择模式)
456
+ return /*#__PURE__*/React.createElement(DropdownItemHoverFill, {
457
+ key: key,
458
+ disabled: item.disabled
459
+ }, /*#__PURE__*/React.createElement(DropdownMenuSub, null, /*#__PURE__*/React.createElement(DropdownMenuSubTrigger, {
460
+ disabled: item.disabled,
461
+ icon: item.icon
462
+ }, item.label), /*#__PURE__*/React.createElement(DropdownMenuSubContent, {
463
+ zIndex: menuZIndex,
464
+ className: popupClassName
423
465
  }, item.children.map(function (child, childIndex) {
424
- return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex);
425
- })));
466
+ return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex, popupClassName);
467
+ }))));
426
468
  }
427
469
 
428
- // 普通子菜单渲染(单选模式或非选择模式)
429
- return /*#__PURE__*/React.createElement(DropdownMenuSub, {
430
- key: key
431
- }, /*#__PURE__*/React.createElement(DropdownMenuSubTrigger, {
432
- disabled: item.disabled
433
- }, item.label), /*#__PURE__*/React.createElement(DropdownMenuSubContent, {
434
- zIndex: menuZIndex
435
- }, item.children.map(function (child, childIndex) {
436
- return renderMenuItem(child, childIndex, _onSelect, onItemClick, isSelectable, multiple, selectedValue, rawOnSelect, menu, layerMapping, menuZIndex);
437
- })));
438
- }
470
+ // 普通菜单项
471
+ // 计算是否选中
472
+ var isSelected = false;
473
+ if (isSelectable && selectedValue !== undefined) {
474
+ if (!multiple) {
475
+ isSelected = selectedValue === item.value;
476
+ } else if (Array.isArray(selectedValue)) {
477
+ var _item$value;
478
+ // 对于全选按钮,检查该层的所有选项是否都被选中
479
+ if ((_item$value = item.value) !== null && _item$value !== void 0 && _item$value.startsWith('selectAll') && layerMapping && item.value) {
480
+ var layerValues = layerMapping[item.value];
481
+ if (layerValues) {
482
+ isSelected = layerValues.length > 0 && layerValues.every(function (val) {
483
+ return selectedValue.includes(val);
484
+ });
485
+ }
486
+ } else {
487
+ // 普通选项,直接检查是否在选中列表中
488
+ isSelected = selectedValue.includes(item.value);
489
+ }
490
+ }
491
+ }
492
+ return /*#__PURE__*/React.createElement(DropdownMenuItem, {
493
+ key: key,
494
+ disabled: item.disabled,
495
+ closeOnClick: !(isSelectable && multiple),
496
+ onSelect: function onSelect(event) {
497
+ // 多选模式下,所有项都不关闭菜单
498
+ var shouldKeepOpen = isSelectable && multiple;
499
+ if (shouldKeepOpen) {
500
+ event.preventDefault();
501
+ }
502
+ _onSelect === null || _onSelect === void 0 || _onSelect(item.value);
439
503
 
440
- // 普通菜单项
441
- // 计算是否选中
442
- var isSelected = false;
443
- if (isSelectable && selectedValue !== undefined) {
444
- if (!multiple) {
445
- isSelected = selectedValue === item.value;
446
- } else if (Array.isArray(selectedValue)) {
447
- var _item$value;
448
- // 对于全选按钮,检查该层的所有选项是否都被选中
449
- if ((_item$value = item.value) !== null && _item$value !== void 0 && _item$value.startsWith('selectAll') && layerMapping && item.value) {
504
+ // 只有在非保持打开的情况下才调用 onItemClick(关闭菜单)
505
+ if (!shouldKeepOpen) {
506
+ onItemClick === null || onItemClick === void 0 || onItemClick();
507
+ }
508
+ }
509
+ }, isSelectable && !multiple && /*#__PURE__*/React.createElement(Radio.Group, {
510
+ value: isSelected ? item.value : '',
511
+ options: [{
512
+ label: '',
513
+ value: item.value
514
+ }],
515
+ "data-odn-dropdown-radio": true
516
+ }), isSelectable && multiple && /*#__PURE__*/React.createElement(Checkbox, {
517
+ checked: isSelected,
518
+ indeterminate: (_item$value2 = item.value) !== null && _item$value2 !== void 0 && _item$value2.startsWith('selectAll') && layerMapping && item.value && Array.isArray(selectedValue) ? function () {
450
519
  var layerValues = layerMapping[item.value];
451
520
  if (layerValues) {
452
- isSelected = layerValues.length > 0 && layerValues.every(function (val) {
521
+ var selectedCount = layerValues.filter(function (val) {
453
522
  return selectedValue.includes(val);
454
- });
523
+ }).length;
524
+ // indeterminate 只在部分选中时显示(既不是全选也不是全不选)
525
+ return selectedCount > 0 && selectedCount < layerValues.length;
455
526
  }
456
- } else {
457
- // 普通选项,直接检查是否在选中列表中
458
- isSelected = selectedValue.includes(item.value);
459
- }
460
- }
527
+ return false;
528
+ }() : false,
529
+ "data-odn-dropdown-checkbox": true
530
+ }), item.icon && /*#__PURE__*/React.createElement(Icon, {
531
+ name: item.icon,
532
+ "data-odn-dropdown-item-icon": true
533
+ }), /*#__PURE__*/React.createElement("span", {
534
+ "data-odn-dropdown-item-label": true
535
+ }, item.label), item.shortcut && /*#__PURE__*/React.createElement(DropdownMenuShortcut, null, item.shortcut));
461
536
  }
462
- return /*#__PURE__*/React.createElement(DropdownMenuItem, {
463
- key: key,
464
- disabled: item.disabled,
465
- closeOnClick: !(isSelectable && multiple),
466
- onSelect: function onSelect(event) {
467
- // 多选模式下,所有项都不关闭菜单
468
- var shouldKeepOpen = isSelectable && multiple;
469
- if (shouldKeepOpen) {
470
- event.preventDefault();
471
- }
472
- _onSelect === null || _onSelect === void 0 || _onSelect(item.value);
473
-
474
- // 只有在非保持打开的情况下才调用 onItemClick(关闭菜单)
475
- if (!shouldKeepOpen) {
476
- onItemClick === null || onItemClick === void 0 || onItemClick();
477
- }
478
- }
479
- }, isSelectable && !multiple && /*#__PURE__*/React.createElement(Radio.Group, {
480
- value: isSelected ? item.value : '',
481
- options: [{
482
- label: '',
483
- value: item.value
484
- }],
485
- "data-odn-dropdown-radio": true
486
- }), isSelectable && multiple && /*#__PURE__*/React.createElement(Checkbox, {
487
- checked: isSelected,
488
- indeterminate: (_item$value2 = item.value) !== null && _item$value2 !== void 0 && _item$value2.startsWith('selectAll') && layerMapping && item.value && Array.isArray(selectedValue) ? function () {
489
- var layerValues = layerMapping[item.value];
490
- if (layerValues) {
491
- var selectedCount = layerValues.filter(function (val) {
492
- return selectedValue.includes(val);
493
- }).length;
494
- // indeterminate 只在部分选中时显示(既不是全选也不是全不选)
495
- return selectedCount > 0 && selectedCount < layerValues.length;
496
- }
497
- return false;
498
- }() : false,
499
- "data-odn-dropdown-checkbox": true
500
- }), item.icon && /*#__PURE__*/React.createElement(Icon, {
501
- name: item.icon,
502
- "data-odn-dropdown-item-icon": true
503
- }), /*#__PURE__*/React.createElement("span", {
504
- "data-odn-dropdown-item-label": true
505
- }, item.label), item.shortcut && /*#__PURE__*/React.createElement(DropdownMenuShortcut, null, item.shortcut));
506
537
  }
507
538
  };
508
539
 
@@ -601,7 +632,7 @@ var Dropdown = function Dropdown(props) {
601
632
  var layerMapping = useMemo(function () {
602
633
  var mapping = {};
603
634
  var collectLayerValues = function collectLayerValues(items) {
604
- var processItem = function processItem(item, parentItem) {
635
+ var processItem = function processItem(item) {
605
636
  // 如果该项有 children,为其创建全选映射
606
637
  if ('value' in item && 'children' in item && item.children) {
607
638
  // 收集该层的所有后代项值(不包括全选按钮),包括直接子项和所有后代
@@ -636,7 +667,7 @@ var Dropdown = function Dropdown(props) {
636
667
 
637
668
  // 递归处理子项,传递当前项作为父项
638
669
  item.children.forEach(function (child) {
639
- processItem(child, item);
670
+ processItem(child);
640
671
  });
641
672
  }
642
673
  };
@@ -737,10 +768,10 @@ var Dropdown = function Dropdown(props) {
737
768
  var parentChildMap = processedMenu ? buildParentChildMap(processedMenu) : {};
738
769
 
739
770
  // 检查每个父项是否应该被自动选中或取消选中
740
- Object.entries(parentChildMap).forEach(function (_ref18) {
741
- var _ref19 = _slicedToArray(_ref18, 2),
742
- parent = _ref19[0],
743
- children = _ref19[1];
771
+ Object.entries(parentChildMap).forEach(function (_ref19) {
772
+ var _ref20 = _slicedToArray(_ref19, 2),
773
+ parent = _ref20[0],
774
+ children = _ref20[1];
744
775
  var allChildrenSelected = children.every(function (child) {
745
776
  return processedValues.includes(child);
746
777
  });
@@ -852,7 +883,7 @@ var Dropdown = function Dropdown(props) {
852
883
  }, [trigger, visible, onVisibleChange]);
853
884
 
854
885
  // 处理状态变化
855
- var handleOpenChange = useCallback(function (open, _eventDetails) {
886
+ var handleOpenChange = useCallback(function (open) {
856
887
  if (trigger === 'click' && !disabled) {
857
888
  onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(open);
858
889
  }
@@ -882,7 +913,7 @@ var Dropdown = function Dropdown(props) {
882
913
  onMouseEnter: handleContentMouseEnter,
883
914
  onMouseLeave: handleContentMouseLeave
884
915
  }, processedMenu === null || processedMenu === void 0 ? void 0 : processedMenu.map(function (item, index) {
885
- return renderMenuItem(item, index, onSelect, handleItemClick, isSelectable, multiple, selectedValue, rawOnSelect, processedMenu, layerMapping, zIndex);
916
+ return renderMenuItem(item, index, onSelect, handleItemClick, isSelectable, multiple, selectedValue, rawOnSelect, processedMenu, layerMapping, zIndex, popupClassName);
886
917
  }))));
887
918
  }
888
919
 
@@ -903,7 +934,7 @@ var Dropdown = function Dropdown(props) {
903
934
  zIndex: zIndex,
904
935
  className: popupClassName
905
936
  }, processedMenu === null || processedMenu === void 0 ? void 0 : processedMenu.map(function (item, index) {
906
- return renderMenuItem(item, index, onSelect, undefined, isSelectable, multiple, selectedValue, rawOnSelect, processedMenu, layerMapping, zIndex);
937
+ return renderMenuItem(item, index, onSelect, undefined, isSelectable, multiple, selectedValue, rawOnSelect, processedMenu, layerMapping, zIndex, popupClassName);
907
938
  })));
908
939
  };
909
940