@bioturing/components 0.27.0 → 0.28.1

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.
Files changed (46) hide show
  1. package/dist/components/checkbox/component.js.map +1 -1
  2. package/dist/components/choice-list/component.js +9 -9
  3. package/dist/components/cmdk/index.js.map +1 -1
  4. package/dist/components/combobox/component.js +202 -0
  5. package/dist/components/combobox/component.js.map +1 -0
  6. package/dist/components/combobox/style.css +1 -0
  7. package/dist/components/combobox/trigger.js +89 -0
  8. package/dist/components/combobox/trigger.js.map +1 -0
  9. package/dist/components/dropdown-menu/component.js +176 -163
  10. package/dist/components/dropdown-menu/component.js.map +1 -1
  11. package/dist/components/dropdown-menu/divider.js +16 -0
  12. package/dist/components/dropdown-menu/divider.js.map +1 -0
  13. package/dist/components/dropdown-menu/item.css +1 -0
  14. package/dist/components/dropdown-menu/item.js +131 -0
  15. package/dist/components/dropdown-menu/item.js.map +1 -0
  16. package/dist/components/dropdown-menu/style.css +1 -1
  17. package/dist/components/hooks/useDraggable.js +77 -0
  18. package/dist/components/hooks/useDraggable.js.map +1 -0
  19. package/dist/components/hooks/useHover.js +26 -0
  20. package/dist/components/hooks/useHover.js.map +1 -0
  21. package/dist/components/hooks/useTransitionStatus.js +52 -0
  22. package/dist/components/hooks/useTransitionStatus.js.map +1 -0
  23. package/dist/components/nav/item.js +2 -2
  24. package/dist/components/popup-panel/component.js +81 -92
  25. package/dist/components/popup-panel/component.js.map +1 -1
  26. package/dist/components/resizable/component.js +165 -97
  27. package/dist/components/resizable/component.js.map +1 -1
  28. package/dist/components/resizable/style.css +1 -1
  29. package/dist/components/select/component.js +160 -91
  30. package/dist/components/select/component.js.map +1 -1
  31. package/dist/components/select/item.js +54 -0
  32. package/dist/components/select/item.js.map +1 -0
  33. package/dist/components/select/style.css +1 -1
  34. package/dist/components/splitter/splitter-panel.js +8 -8
  35. package/dist/components/splitter/splitter.js +9 -9
  36. package/dist/components/splitter/useSizes.js +10 -10
  37. package/dist/components/splitter/useSizes.js.map +1 -1
  38. package/dist/components/stack/StackChild.js +9 -9
  39. package/dist/components/transition/component.js +1 -1
  40. package/dist/components/transition/component.js.map +1 -1
  41. package/dist/index.d.ts +317 -5
  42. package/dist/index.js +204 -194
  43. package/dist/index.js.map +1 -1
  44. package/dist/metadata.js +21 -7
  45. package/dist/metadata.js.map +1 -1
  46. package/package.json +4 -3
@@ -0,0 +1,89 @@
1
+ "use client";
2
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
3
+ import { forwardRef as $ } from "react";
4
+ import { XCircleIcon as j, CaretDownIcon as k } from "@bioturing/assets";
5
+ import { useCls as I } from "../utils/antdUtils.js";
6
+ import { clsx as v } from "../utils/cn.js";
7
+ const y = $(
8
+ ({
9
+ selectedOptions: c,
10
+ placeholder: x = "Select...",
11
+ multiple: n = !1,
12
+ disabled: b = !1,
13
+ open: s = !1,
14
+ size: h = "middle",
15
+ allowClear: m = !1,
16
+ suffixIcon: d,
17
+ clearIcon: g,
18
+ classNames: r,
19
+ className: f,
20
+ onClear: l,
21
+ showSelectionSummary: p = !1,
22
+ selectionSummaryRender: i,
23
+ ...u
24
+ }, N) => {
25
+ const o = I(), w = () => {
26
+ if (c.length === 0)
27
+ return /* @__PURE__ */ e("span", { className: o("combobox-selection-placeholder"), children: x });
28
+ if (n) {
29
+ if (p) {
30
+ const a = c.map((T) => T.value);
31
+ return /* @__PURE__ */ e("span", { className: o("combobox-selection-summary"), children: i ? i(a) : `${c.length} items selected` });
32
+ }
33
+ return /* @__PURE__ */ e("span", { className: o("combobox-selection-text"), children: c.length === 1 ? c[0].label : `${c.length} items selected` });
34
+ } else
35
+ return /* @__PURE__ */ e("span", { className: o("combobox-selection-text"), children: c[0].label });
36
+ }, C = (a) => {
37
+ a.stopPropagation(), l == null || l();
38
+ };
39
+ return /* @__PURE__ */ e(
40
+ "button",
41
+ {
42
+ ref: N,
43
+ className: v(
44
+ o("combobox"),
45
+ o(`combobox-${h}`),
46
+ n && o("combobox-multiple"),
47
+ b && o("combobox-disabled"),
48
+ s && o("combobox-open"),
49
+ o("combobox-trigger"),
50
+ r == null ? void 0 : r.trigger,
51
+ f
52
+ ),
53
+ disabled: b,
54
+ role: "combobox",
55
+ "aria-expanded": s,
56
+ ...u,
57
+ children: /* @__PURE__ */ t("span", { className: o("combobox-selector"), children: [
58
+ /* @__PURE__ */ e("span", { className: o("combobox-selection-wrap"), children: w() }),
59
+ /* @__PURE__ */ t("span", { className: o("combobox-selection-suffix"), children: [
60
+ m && c.length > 0 && /* @__PURE__ */ e(
61
+ "span",
62
+ {
63
+ className: o("combobox-clear"),
64
+ unselectable: "on",
65
+ "aria-hidden": "true",
66
+ onClick: C,
67
+ children: g || /* @__PURE__ */ e("span", { className: o("combobox-clear-icon"), children: /* @__PURE__ */ e(j, { weight: "fill" }) })
68
+ }
69
+ ),
70
+ (!m || c.length === 0) && /* @__PURE__ */ e(
71
+ "span",
72
+ {
73
+ className: o("combobox-arrow"),
74
+ unselectable: "on",
75
+ "aria-hidden": "true",
76
+ children: d || /* @__PURE__ */ e("span", { className: o("combobox-arrow-icon"), children: /* @__PURE__ */ e(k, { weight: "bold" }) })
77
+ }
78
+ )
79
+ ] })
80
+ ] })
81
+ }
82
+ );
83
+ }
84
+ );
85
+ y.displayName = "ComboboxTrigger";
86
+ export {
87
+ y as ComboboxTrigger
88
+ };
89
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.js","sources":["../../../src/components/combobox/trigger.tsx"],"sourcesContent":["\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { CaretDownIcon, XCircleIcon, XIcon } from \"@bioturing/assets\";\nimport { clsx, useCls } from \"../utils\";\nimport type { ComboboxOption } from \"./component\";\n\nexport interface ComboboxTriggerProps\n extends React.ComponentPropsWithoutRef<\"button\"> {\n /** Selected options */\n selectedOptions: ComboboxOption[];\n /** Placeholder text */\n placeholder?: string;\n /** Whether multiple selection is enabled */\n multiple?: boolean;\n /** Whether the component is disabled */\n disabled?: boolean;\n /** Whether the dropdown is open */\n open?: boolean;\n /** Size variant */\n size?: \"small\" | \"middle\" | \"large\";\n /** Whether to show clear button */\n allowClear?: boolean;\n /** Custom suffix icon */\n suffixIcon?: React.ReactNode;\n /** Custom clear icon */\n clearIcon?: React.ReactNode;\n /** Custom class names */\n classNames?: {\n trigger?: string;\n };\n /** Clear handler */\n onClear?: () => void;\n /** Show selection summary instead of individual tags when multiple */\n showSelectionSummary?: boolean;\n /** Render function for the selection summary in multiple case */\n selectionSummaryRender?: (selectedValues: Array<string | number>) => React.ReactNode;\n}\n\nexport const ComboboxTrigger = forwardRef<\n HTMLButtonElement,\n ComboboxTriggerProps\n>(\n (\n {\n selectedOptions,\n placeholder = \"Select...\",\n multiple = false,\n disabled = false,\n open = false,\n size = \"middle\",\n allowClear = false,\n suffixIcon,\n clearIcon,\n classNames,\n className,\n onClear,\n showSelectionSummary = false,\n selectionSummaryRender,\n ...rest\n },\n ref\n ) => {\n const cls = useCls();\n\n const renderTriggerContent = () => {\n if (selectedOptions.length === 0) {\n return (\n <span className={cls(\"combobox-selection-placeholder\")}>\n {placeholder}\n </span>\n );\n }\n\n if (multiple) {\n // Show selection summary if enabled\n if (showSelectionSummary) {\n const selectedValues = selectedOptions.map(opt => opt.value);\n return (\n <span className={cls(\"combobox-selection-summary\")}>\n {selectionSummaryRender\n ? selectionSummaryRender(selectedValues)\n : `${selectedOptions.length} items selected`}\n </span>\n );\n }\n \n // Default: Simple text display for multiple selections - no tags\n return (\n <span className={cls(\"combobox-selection-text\")}>\n {selectedOptions.length === 1\n ? selectedOptions[0].label\n : `${selectedOptions.length} items selected`}\n </span>\n );\n } else {\n return (\n <span className={cls(\"combobox-selection-text\")}>\n {selectedOptions[0].label}\n </span>\n );\n }\n };\n\n const handleClearClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n cls(\"combobox\"),\n cls(`combobox-${size}`),\n multiple && cls(\"combobox-multiple\"),\n disabled && cls(\"combobox-disabled\"),\n open && cls(\"combobox-open\"),\n cls(\"combobox-trigger\"),\n classNames?.trigger,\n className\n )}\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={open}\n {...rest}\n >\n <span className={cls(\"combobox-selector\")}>\n <span className={cls(\"combobox-selection-wrap\")}>\n {renderTriggerContent()}\n </span>\n <span className={cls(\"combobox-selection-suffix\")}>\n {allowClear && selectedOptions.length > 0 && (\n <span\n className={cls(\"combobox-clear\")}\n unselectable=\"on\"\n aria-hidden=\"true\"\n onClick={handleClearClick}\n >\n {clearIcon || (\n <span className={cls(\"combobox-clear-icon\")}>\n <XCircleIcon weight=\"fill\" />\n </span>\n )}\n </span>\n )}\n {(!allowClear || selectedOptions.length === 0) && (\n <span\n className={cls(\"combobox-arrow\")}\n unselectable=\"on\"\n aria-hidden=\"true\"\n >\n {suffixIcon || (\n <span className={cls(\"combobox-arrow-icon\")}>\n <CaretDownIcon weight=\"bold\" />\n </span>\n )}\n </span>\n )}\n </span>\n </span>\n </button>\n );\n }\n);\n\nComboboxTrigger.displayName = \"ComboboxTrigger\";\n"],"names":["ComboboxTrigger","forwardRef","selectedOptions","placeholder","multiple","disabled","open","size","allowClear","suffixIcon","clearIcon","classNames","className","onClear","showSelectionSummary","selectionSummaryRender","rest","ref","cls","useCls","renderTriggerContent","selectedValues","opt","jsx","handleClearClick","e","clsx","jsxs","XCircleIcon","CaretDownIcon"],"mappings":"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"}
@@ -1,207 +1,220 @@
1
1
  "use client";
2
- import { jsx as e, jsxs as g } from "react/jsx-runtime";
3
- import { useCallback as M, useRef as j, createElement as q } from "react";
4
- import { Menu as f } from "@base-ui-components/react/menu";
5
- import { useControlled as F } from "@base-ui-components/react/utils";
6
- import { Popover as H } from "@base-ui-components/react/popover";
7
- import { Command as u } from "../cmdk/index.js";
8
- import { PopupPanelSize as S } from "../popup-panel/constants.js";
2
+ import { jsx as p, jsxs as b } from "react/jsx-runtime";
3
+ import { useCallback as w, useRef as X, createElement as Y } from "react";
4
+ import { Menu as h } from "@base-ui-components/react/menu";
5
+ import { useControlled as Z } from "@base-ui-components/utils/useControlled";
6
+ import { Popover as $ } from "@base-ui-components/react/popover";
7
+ import { Command as g } from "../cmdk/index.js";
8
+ import { PopupPanelSize as j } from "../popup-panel/constants.js";
9
+ import { DropdownMenuItem as c } from "./item.js";
9
10
  import './style.css';/* empty css */
10
- import { parseAntdPlacement as J } from "../utils/placement.js";
11
- import { Input as K } from "../input/component.js";
12
- import { ScrollArea as R } from "../scroll-area/component.js";
13
- import { DROPDOWN_COLLISION_AVOIDANCE as Q } from "../utils/constants.js";
14
- import { useCls as X, useAntdCssVarClassname as Y } from "../utils/antdUtils.js";
15
- import { clsx as d } from "../utils/cn.js";
16
- const fo = ({
17
- children: V,
18
- items: _,
19
- placement: x,
20
- openOnHover: z,
21
- open: B,
11
+ import { DropdownMenuDivider as O } from "./divider.js";
12
+ import { parseAntdPlacement as K } from "../utils/placement.js";
13
+ import { Input as a } from "../input/component.js";
14
+ import { ScrollArea as z } from "../scroll-area/component.js";
15
+ import { DROPDOWN_COLLISION_AVOIDANCE as N } from "../utils/constants.js";
16
+ import { useCls as s, useAntdCssVarClassname as oo } from "../utils/antdUtils.js";
17
+ import { clsx as u } from "../utils/cn.js";
18
+ const Co = ({
19
+ children: B,
20
+ items: S,
21
+ placement: T,
22
+ openOnHover: U,
23
+ open: W,
22
24
  onOpenChange: v,
23
- className: O,
24
- itemRender: I,
25
- classNames: r,
26
- size: C = "auto",
27
- showSearch: i,
28
- searchProps: L = {
25
+ className: q,
26
+ itemRender: k,
27
+ classNames: o,
28
+ size: y = "auto",
29
+ showSearch: d,
30
+ searchProps: E = {
29
31
  placeholder: "Search..."
30
- }
32
+ },
33
+ popupMatchTriggerWidth: F,
34
+ beforeList: C,
35
+ afterList: D,
36
+ keepOpenOnSelect: L,
37
+ highlightedItemKey: G,
38
+ selectedItemKeys: P,
39
+ showCheckbox: M
31
40
  }) => {
32
- const [T, P] = F({
33
- controlled: B,
41
+ const [H, R] = Z({
42
+ controlled: W,
34
43
  default: !1,
35
44
  name: "open"
36
- }), m = M(
37
- (o) => {
38
- P(o), v == null || v(o);
45
+ }), l = w(
46
+ (r) => {
47
+ R(r), v == null || v(r);
39
48
  },
40
- [P, v]
41
- ), n = X(), k = Y(), G = J(x), U = j(null), w = _.reduce((o, t) => (o.length === 0 && t.type !== "header" && o.push({
49
+ [R, v]
50
+ ), e = s(), V = oo(), x = K(T), J = X(null), A = S.reduce((r, n) => (r.length === 0 && n.type !== "header" && r.push({
42
51
  label: null,
43
52
  items: []
44
- }), t.type === "header" ? o.push({
45
- label: t.title,
53
+ }), n.type === "header" ? r.push({
54
+ label: n.title,
46
55
  items: []
47
- }) : (t.type === "item" || t.type === "divider") && o.length > 0 && o[o.length - 1].items.push(t), o), []), c = i ? u.Separator : f.Separator, b = M(
48
- (o, t, p) => {
49
- const l = i ? u.Item : f.Item;
50
- if (o.type === "item") {
51
- const D = {
52
- className: d(n("dropdown-menu-item"), r == null ? void 0 : r.item),
53
- disabled: o.disabled,
54
- "data-danger": o.danger,
55
- ref: o.ref,
56
- onClick: o.onClick,
57
- onMouseEnter: o.onMouseEnter,
58
- onMouseLeave: o.onMouseLeave,
59
- onMouseOver: o.onMouseOver,
60
- onMouseOut: o.onMouseOut,
61
- onSelect: i ? () => {
62
- const y = new MouseEvent("click", {
63
- bubbles: !0,
64
- cancelable: !0
65
- });
66
- o.onClick(y), m == null || m(!1);
67
- } : void 0,
68
- render: I ? (y) => I(o, y) : void 0,
69
- children: [
70
- o.icon && /* @__PURE__ */ e(
71
- "span",
72
- {
73
- className: d(
74
- n("dropdown-menu-item-icon"),
75
- r == null ? void 0 : r.itemIcon
76
- ),
77
- children: o.icon
78
- },
79
- "icon"
80
- ),
81
- /* @__PURE__ */ e("span", { children: o.label }, "label")
82
- ]
83
- };
84
- return i ? /* @__PURE__ */ e(u.Item, { ...D }, t + "-" + p) : /* @__PURE__ */ e(l, { ...D }, t + "-" + p);
85
- } else if (o.type === "divider")
86
- return /* @__PURE__ */ e(
87
- c,
88
- {
89
- className: d(
90
- n("dropdown-menu-divider"),
91
- r == null ? void 0 : r.separator
92
- )
93
- },
94
- t + "-" + p
95
- );
96
- return null;
97
- },
98
- [n, r, I, m, i, c]
99
- ), A = M(
100
- (o, t) => /* @__PURE__ */ g(
101
- f.Group,
56
+ }) : (n.type === "item" || n.type === "divider") && r.length > 0 && r[r.length - 1].items.push(n), r), []), m = w(
57
+ (r, n, t) => r.type === "item" ? /* @__PURE__ */ p(
58
+ c,
59
+ {
60
+ item: r,
61
+ inCombobox: d,
62
+ selected: P == null ? void 0 : P.includes(r.key),
63
+ onSelect: d ? () => {
64
+ const i = new MouseEvent("click", {
65
+ bubbles: !0,
66
+ cancelable: !0
67
+ });
68
+ r.onClick(i), L || l == null || l(!1);
69
+ } : void 0,
70
+ itemRender: k,
71
+ showCheckbox: M
72
+ },
73
+ n + "-" + t
74
+ ) : r.type === "divider" ? /* @__PURE__ */ p(
75
+ O,
76
+ {
77
+ inCombobox: d,
78
+ className: o == null ? void 0 : o.separator
79
+ },
80
+ n + "-" + t
81
+ ) : null,
82
+ [
83
+ o,
84
+ k,
85
+ l,
86
+ d,
87
+ L,
88
+ P,
89
+ M
90
+ ]
91
+ ), I = w(
92
+ (r, n) => /* @__PURE__ */ b(
93
+ h.Group,
102
94
  {
103
- className: d(n("dropdown-menu-group"), r == null ? void 0 : r.group),
95
+ className: u(e("dropdown-menu-group"), o == null ? void 0 : o.group),
104
96
  children: [
105
- o.label && /* @__PURE__ */ e(
106
- f.GroupLabel,
97
+ r.label && /* @__PURE__ */ p(
98
+ h.GroupLabel,
107
99
  {
108
- className: d(
109
- n("dropdown-menu-header"),
110
- r == null ? void 0 : r.groupLabel
100
+ className: u(
101
+ e("dropdown-menu-header"),
102
+ o == null ? void 0 : o.groupLabel
111
103
  ),
112
- children: /* @__PURE__ */ e("span", { children: o.label })
104
+ children: /* @__PURE__ */ p("span", { children: r.label })
113
105
  }
114
106
  ),
115
- o.items.map((p, l) => b(p, t, l))
107
+ r.items.map((t, i) => m(t, n, i))
116
108
  ]
117
109
  },
118
- "group" + t
110
+ "group" + n
119
111
  ),
120
- [n, r, b]
121
- ), E = M(
122
- (o, t) => o.label ? /* @__PURE__ */ e(
123
- u.Group,
112
+ [e, o, m]
113
+ ), _ = w(
114
+ (r, n) => r.label ? /* @__PURE__ */ p(
115
+ g.Group,
124
116
  {
125
- className: d(n("dropdown-menu-group"), r == null ? void 0 : r.group),
126
- heading: /* @__PURE__ */ e(
127
- f.GroupLabel,
117
+ className: u(e("dropdown-menu-group"), o == null ? void 0 : o.group),
118
+ heading: /* @__PURE__ */ p(
119
+ h.GroupLabel,
128
120
  {
129
- className: d(
130
- n("dropdown-menu-header"),
131
- r == null ? void 0 : r.groupLabel
121
+ className: u(
122
+ e("dropdown-menu-header"),
123
+ o == null ? void 0 : o.groupLabel
132
124
  ),
133
- children: /* @__PURE__ */ e("span", { children: o.label })
125
+ children: /* @__PURE__ */ p("span", { children: r.label })
134
126
  }
135
127
  ),
136
- children: o.items.map((p, l) => b(p, t, l))
128
+ children: r.items.map((t, i) => m(t, n, i))
137
129
  },
138
- "group" + t
139
- ) : o.items.map((p, l) => b(p, t, l)),
140
- [n, r, b]
141
- ), W = M(
142
- () => i ? /* @__PURE__ */ g(u, { className: n("dropdown-menu-container"), children: [
143
- /* @__PURE__ */ q(
144
- u.Input,
145
- {
146
- ...L,
147
- key: "search",
148
- render: /* @__PURE__ */ e(K, { allowClear: !0, className: n("dropdown-menu-search") })
149
- }
150
- ),
151
- /* @__PURE__ */ e(R, { children: /* @__PURE__ */ g(u.List, { className: n("dropdown-menu-list"), children: [
152
- /* @__PURE__ */ e(u.Empty, { className: n("dropdown-menu-empty"), children: "No results found." }),
153
- w.map(E)
154
- ] }) })
155
- ] }) : /* @__PURE__ */ e("div", { className: n("dropdown-menu-container"), children: /* @__PURE__ */ e(R, { children: w.map(A) }) }),
130
+ "group" + n
131
+ ) : r.items.map((t, i) => m(t, n, i)),
132
+ [e, o, m]
133
+ ), Q = w(
134
+ () => d ? /* @__PURE__ */ b(
135
+ g,
136
+ {
137
+ className: e("dropdown-menu-container"),
138
+ disablePointerSelection: d,
139
+ defaultValue: G ? String(G) : void 0,
140
+ children: [
141
+ /* @__PURE__ */ Y(
142
+ g.Input,
143
+ {
144
+ ...E,
145
+ key: "search",
146
+ render: /* @__PURE__ */ p(a, { allowClear: !0, className: e("dropdown-menu-search") })
147
+ }
148
+ ),
149
+ C,
150
+ /* @__PURE__ */ p(z, { children: /* @__PURE__ */ b(g.List, { className: e("dropdown-menu-list"), children: [
151
+ /* @__PURE__ */ p(g.Empty, { className: e("dropdown-menu-empty"), children: "No results found." }),
152
+ A.map(_)
153
+ ] }) }),
154
+ D
155
+ ]
156
+ }
157
+ ) : /* @__PURE__ */ b("div", { className: e("dropdown-menu-container"), children: [
158
+ C,
159
+ /* @__PURE__ */ p(z, { children: A.map(I) }),
160
+ D
161
+ ] }),
156
162
  [
157
- i,
158
- w,
163
+ d,
164
+ e,
165
+ G,
159
166
  E,
167
+ C,
160
168
  A,
161
- L,
162
- n
169
+ _,
170
+ D,
171
+ I
163
172
  ]
164
- ), h = i ? H : f;
165
- return /* @__PURE__ */ g(
166
- h.Root,
173
+ ), f = d ? $ : h;
174
+ return /* @__PURE__ */ b(
175
+ f.Root,
167
176
  {
168
- openOnHover: z,
169
- open: T,
170
- onOpenChange: m,
177
+ openOnHover: U,
178
+ open: H,
179
+ onOpenChange: l,
171
180
  children: [
172
- /* @__PURE__ */ e(
173
- h.Trigger,
181
+ /* @__PURE__ */ p(
182
+ f.Trigger,
174
183
  {
175
- render: V,
176
- ref: U,
177
- className: d(
178
- n("dropdown-menu-trigger"),
179
- r == null ? void 0 : r.trigger,
180
- k
184
+ render: B,
185
+ ref: J,
186
+ className: u(
187
+ e("dropdown-menu-trigger"),
188
+ o == null ? void 0 : o.trigger,
189
+ V
181
190
  )
182
191
  }
183
192
  ),
184
- /* @__PURE__ */ e(h.Portal, { children: /* @__PURE__ */ e(
185
- h.Positioner,
193
+ /* @__PURE__ */ p(f.Portal, { children: /* @__PURE__ */ p(
194
+ f.Positioner,
186
195
  {
187
- side: G.side,
188
- align: G.align,
196
+ side: x.side,
197
+ align: x.align,
189
198
  sideOffset: 4,
190
- className: d(n("dropdown-menu-root"), r == null ? void 0 : r.root),
191
- collisionAvoidance: Q,
192
- children: /* @__PURE__ */ e(
193
- h.Popup,
199
+ className: u(e("dropdown-menu-root"), o == null ? void 0 : o.root),
200
+ collisionAvoidance: N,
201
+ children: /* @__PURE__ */ p(
202
+ f.Popup,
194
203
  {
195
- className: d(
196
- n("dropdown-menu"),
197
- O,
198
- r == null ? void 0 : r.popup,
199
- k
204
+ className: u(
205
+ e(
206
+ "dropdown-menu",
207
+ M && "dropdown-menu-show-checkbox",
208
+ F && "dropdown-menu-match-trigger-width"
209
+ ),
210
+ q,
211
+ o == null ? void 0 : o.popup,
212
+ V
200
213
  ),
201
214
  style: {
202
- "--size-width": C in S ? S[C] : void 0
215
+ "--size-width": y in j ? j[y] : void 0
203
216
  },
204
- children: W()
217
+ children: Q()
205
218
  }
206
219
  )
207
220
  }
@@ -211,6 +224,6 @@ const fo = ({
211
224
  );
212
225
  };
213
226
  export {
214
- fo as DropdownMenu
227
+ Co as DropdownMenu
215
228
  };
216
229
  //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { useControlled } from \"@base-ui-components/react/utils\";\nimport { Popover } from \"@base-ui-components/react/popover\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { Ref, useCallback, useRef } from \"react\";\nimport {\n clsx,\n DROPDOWN_COLLISION_AVOIDANCE,\n parseAntdPlacement,\n useAntdCssVarClassname,\n useCls,\n BaseUIPlacement,\n} from \"../utils\";\nimport { Command } from \"../cmdk\";\nimport { ScrollArea } from \"../scroll-area\";\n\n// Import component-specific styles\nimport { Input } from \"../input\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\n\nimport \"./style.css\";\n\nexport type DropdownMenuItemType =\n | {\n type: \"item\";\n label?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n key: React.Key;\n onClick?: React.HTMLAttributes<HTMLElement>[\"onClick\"];\n onMouseEnter?: React.HTMLAttributes<HTMLElement>[\"onMouseEnter\"];\n onMouseLeave?: React.HTMLAttributes<HTMLElement>[\"onMouseLeave\"];\n onMouseOver?: React.HTMLAttributes<HTMLElement>[\"onMouseOver\"];\n onMouseOut?: React.HTMLAttributes<HTMLElement>[\"onMouseOut\"];\n danger?: boolean;\n ref?: React.Ref<HTMLElement>;\n }\n | {\n type: \"divider\";\n }\n | {\n type: \"header\";\n title?: React.ReactNode;\n };\n\nexport interface DropdownMenuProps {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n group?: string;\n groupLabel?: string;\n item?: string;\n itemIcon?: string;\n itemText?: string;\n separator?: string;\n positioner?: string;\n };\n /**\n * Custom render function for menu items\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: Omit<\n React.ComponentProps<typeof Command.Input>,\n \"size\" | \"ref\"\n >;\n /**\n *\n */\n}\n\ninterface DropdownMenuGroup {\n label: React.ReactNode | null;\n items: DropdownMenuItemType[];\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n searchProps = {\n placeholder: \"Search...\",\n },\n}: DropdownMenuProps) => {\n const [open, setOpen] = useControlled({\n controlled: outsideOpen,\n default: false,\n name: \"open\",\n });\n const onOpenChange = useCallback(\n (newValue: boolean) => {\n setOpen(newValue);\n outsideOnOpenChange?.(newValue);\n },\n [setOpen, outsideOnOpenChange]\n );\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const baseUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const itemGroups = items.reduce<DropdownMenuGroup[]>((acc, current) => {\n // If no groups exist yet and current item is not a header, create default group\n if (acc.length === 0 && current.type !== \"header\") {\n acc.push({\n label: null,\n items: [],\n });\n }\n\n // If it's a header, create a new group\n if (current.type === \"header\") {\n acc.push({\n label: current.title,\n items: [],\n });\n }\n // If it's an item and we have at least one group, add it to the last group's items\n else if (\n (current.type === \"item\" || current.type === \"divider\") &&\n acc.length > 0\n ) {\n acc[acc.length - 1].items.push(current);\n }\n // Skip dividers\n return acc;\n }, []);\n\n const MenuSeparator = showSearch ? Command.Separator : Menu.Separator;\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, i: number, j: number) => {\n const MenuItem = showSearch ? Command.Item : Menu.Item;\n\n if (item.type === \"item\") {\n const props = {\n className: clsx(cls(\"dropdown-menu-item\"), classNames?.item),\n disabled: item.disabled,\n \"data-danger\": item.danger,\n ref: item.ref as Ref<HTMLDivElement>,\n onClick: item.onClick,\n onMouseEnter: item.onMouseEnter,\n onMouseLeave: item.onMouseLeave,\n onMouseOver: item.onMouseOver,\n onMouseOut: item.onMouseOut,\n onSelect: showSearch\n ? () => {\n const e = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n }) as unknown as React.MouseEvent<HTMLElement, MouseEvent>;\n item.onClick(e);\n onOpenChange?.(false);\n }\n : undefined,\n render: itemRender\n ? (itemProps: React.HTMLAttributes<HTMLElement>) =>\n itemRender(item, itemProps)\n : undefined,\n children: [\n item.icon && (\n <span\n key=\"icon\"\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon\n )}\n >\n {item.icon}\n </span>\n ),\n <span key=\"label\">{item.label}</span>,\n ],\n };\n return showSearch ? (\n <Command.Item key={i + \"-\" + j} {...props}></Command.Item>\n ) : (\n <MenuItem key={i + \"-\" + j} {...props}></MenuItem>\n );\n } else if (item.type === \"divider\") {\n return (\n <MenuSeparator\n key={i + \"-\" + j}\n className={clsx(\n cls(\"dropdown-menu-divider\"),\n classNames?.separator\n )}\n />\n );\n }\n return null;\n },\n [cls, classNames, itemRender, onOpenChange, showSearch, MenuSeparator]\n );\n\n const renderGroup = useCallback(\n (group: DropdownMenuGroup, index: number) => (\n <Menu.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n >\n {group.label && (\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n )}\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Menu.Group>\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderGroupShowSearch = useCallback(\n (group: DropdownMenuGroup, index: number) =>\n group.label ? (\n <Command.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n heading={\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n }\n >\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Command.Group>\n ) : (\n group.items.map((item, j) => renderMenuItem(item, index, j))\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderMenuInner = useCallback(\n () =>\n showSearch ? (\n <Command className={cls(\"dropdown-menu-container\")}>\n <Command.Input\n {...searchProps}\n key=\"search\"\n render={\n <Input allowClear className={cls(\"dropdown-menu-search\")} />\n }\n />\n <ScrollArea>\n <Command.List className={cls(\"dropdown-menu-list\")}>\n <Command.Empty className={cls(\"dropdown-menu-empty\")}>\n No results found.\n </Command.Empty>\n {itemGroups.map(renderGroupShowSearch)}\n </Command.List>\n </ScrollArea>\n </Command>\n ) : (\n <div className={cls(\"dropdown-menu-container\")}>\n <ScrollArea>{itemGroups.map(renderGroup)}</ScrollArea>\n </div>\n ),\n [\n showSearch,\n itemGroups,\n renderGroupShowSearch,\n renderGroup,\n searchProps,\n cls,\n ]\n );\n\n const BaseComponent = showSearch ? Popover : Menu;\n\n return (\n <BaseComponent.Root\n openOnHover={openOnHover}\n open={open}\n onOpenChange={onOpenChange}\n >\n <BaseComponent.Trigger\n render={children}\n ref={buttonRef}\n className={clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n antdCssVarClassname\n )}\n />\n <BaseComponent.Portal>\n <BaseComponent.Positioner\n side={baseUIPlacement.side}\n align={baseUIPlacement.align}\n sideOffset={4}\n className={clsx(cls(\"dropdown-menu-root\"), classNames?.root)}\n collisionAvoidance={DROPDOWN_COLLISION_AVOIDANCE}\n >\n <BaseComponent.Popup\n className={clsx(\n cls(\"dropdown-menu\"),\n className,\n classNames?.popup,\n antdCssVarClassname\n )}\n style={\n {\n \"--size-width\":\n size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n } as React.CSSProperties\n }\n >\n {renderMenuInner()}\n </BaseComponent.Popup>\n </BaseComponent.Positioner>\n </BaseComponent.Portal>\n </BaseComponent.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","className","itemRender","classNames","size","showSearch","searchProps","open","setOpen","useControlled","onOpenChange","useCallback","newValue","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","baseUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","acc","current","MenuSeparator","Command","Menu","renderMenuItem","item","i","j","MenuItem","props","clsx","e","itemProps","jsx","renderGroup","group","index","jsxs","renderGroupShowSearch","renderMenuInner","createElement","Input","ScrollArea","BaseComponent","Popover","DROPDOWN_COLLISION_AVOIDANCE","PopupPanelSize"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { useControlled } from \"@base-ui-components/utils/useControlled\";\nimport { Popover } from \"@base-ui-components/react/popover\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { useCallback, useRef } from \"react\";\nimport {\n clsx,\n DROPDOWN_COLLISION_AVOIDANCE,\n parseAntdPlacement,\n useAntdCssVarClassname,\n useCls,\n} from \"../utils\";\nimport { Command } from \"../cmdk\";\nimport { ScrollArea } from \"../scroll-area\";\n\n// Import component-specific styles\nimport { Input } from \"../input\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { DropdownMenuItem } from \"./item\";\n\nimport \"./style.css\";\nimport { DropdownMenuDivider } from \"./divider\";\n\nexport type DropdownMenuItemType =\n | {\n /**\n * The type of the menu item\n */\n type: \"item\";\n /**\n * The label of the menu item\n */\n label?: React.ReactNode;\n /**\n * Whether the menu item is disabled\n */\n disabled?: boolean;\n /**\n * The icon of the menu item\n */\n icon?: React.ReactNode;\n /**\n * The key of the menu item\n */\n key: React.Key;\n /**\n * The onClick event handler of the menu item\n */\n onClick?: React.HTMLAttributes<HTMLElement>[\"onClick\"];\n /**\n * The onMouseEnter event handler of the menu item\n */\n onMouseEnter?: React.HTMLAttributes<HTMLElement>[\"onMouseEnter\"];\n /**\n * The onMouseLeave event handler of the menu item\n */\n onMouseLeave?: React.HTMLAttributes<HTMLElement>[\"onMouseLeave\"];\n /**\n * The onMouseOver event handler of the menu item\n */\n onMouseOver?: React.HTMLAttributes<HTMLElement>[\"onMouseOver\"];\n /**\n * The onMouseOut event handler of the menu item\n */\n onMouseOut?: React.HTMLAttributes<HTMLElement>[\"onMouseOut\"];\n /**\n * The className of the menu item\n */\n className?: string;\n /**\n * Whether the menu item is a danger item\n */\n danger?: boolean;\n /**\n * The ref of the menu item\n */\n ref?: React.Ref<HTMLElement>;\n }\n | {\n /**\n * The type of the menu item\n */\n type: \"divider\";\n }\n | {\n /**\n * The type of the menu item\n */\n type: \"header\";\n /**\n * The title of the menu item\n */\n title?: React.ReactNode;\n /**\n * The className of the menu item\n */\n className?: string;\n };\n\nexport interface DropdownMenuProps {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n group?: string;\n groupLabel?: string;\n item?: string;\n itemIcon?: string;\n itemText?: string;\n separator?: string;\n positioner?: string;\n };\n /**\n * Custom render function for menu items\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: Omit<\n React.ComponentProps<typeof Command.Input>,\n \"size\" | \"ref\"\n >;\n /**\n * Whether to match the width of the popup with the trigger\n * @default false\n */\n popupMatchTriggerWidth?: boolean;\n\n /**\n * Content to display before the list\n */\n beforeList?: React.ReactNode;\n /**\n * Content to display after the list\n */\n afterList?: React.ReactNode;\n /**\n * Whether to keep the dropdown open when an item is selected\n * @default false\n */\n keepOpenOnSelect?: boolean;\n /**\n * Control the highlighted state of the menu item\n */\n highlightedItemKey?: React.Key;\n /**\n * Control the selected state of the menu item\n */\n selectedItemKeys?: React.Key[];\n /**\n * Whether to show checkbox\n * @default false\n */\n showCheckbox?: boolean;\n}\n\ninterface DropdownMenuGroup {\n label: React.ReactNode | null;\n items: DropdownMenuItemType[];\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n searchProps = {\n placeholder: \"Search...\",\n },\n popupMatchTriggerWidth,\n beforeList,\n afterList,\n keepOpenOnSelect,\n highlightedItemKey,\n selectedItemKeys,\n showCheckbox,\n}: DropdownMenuProps) => {\n const [open, setOpen] = useControlled({\n controlled: outsideOpen,\n default: false,\n name: \"open\",\n });\n const onOpenChange = useCallback(\n (newValue: boolean) => {\n setOpen(newValue);\n outsideOnOpenChange?.(newValue);\n },\n [setOpen, outsideOnOpenChange]\n );\n const cls = useCls();\n const antdCssVarClassname = useAntdCssVarClassname();\n const baseUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const itemGroups = items.reduce<DropdownMenuGroup[]>((acc, current) => {\n // If no groups exist yet and current item is not a header, create default group\n if (acc.length === 0 && current.type !== \"header\") {\n acc.push({\n label: null,\n items: [],\n });\n }\n\n // If it's a header, create a new group\n if (current.type === \"header\") {\n acc.push({\n label: current.title,\n items: [],\n });\n }\n // If it's an item and we have at least one group, add it to the last group's items\n else if (\n (current.type === \"item\" || current.type === \"divider\") &&\n acc.length > 0\n ) {\n acc[acc.length - 1].items.push(current);\n }\n // Skip dividers\n return acc;\n }, []);\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, i: number, j: number) => {\n if (item.type === \"item\") {\n return (\n <DropdownMenuItem\n key={i + \"-\" + j}\n item={item}\n inCombobox={showSearch}\n selected={selectedItemKeys?.includes(item.key)}\n onSelect={\n showSearch\n ? () => {\n const e = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n }) as unknown as React.MouseEvent<HTMLElement, MouseEvent>;\n item.onClick(e);\n if (!keepOpenOnSelect) onOpenChange?.(false);\n }\n : undefined\n }\n itemRender={itemRender}\n showCheckbox={showCheckbox}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={i + \"-\" + j}\n inCombobox={showSearch}\n className={classNames?.separator}\n />\n );\n }\n return null;\n },\n [\n classNames,\n itemRender,\n onOpenChange,\n showSearch,\n keepOpenOnSelect,\n selectedItemKeys,\n showCheckbox,\n ]\n );\n\n const renderGroup = useCallback(\n (group: DropdownMenuGroup, index: number) => (\n <Menu.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n >\n {group.label && (\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n )}\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Menu.Group>\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderGroupShowSearch = useCallback(\n (group: DropdownMenuGroup, index: number) =>\n group.label ? (\n <Command.Group\n key={\"group\" + index}\n className={clsx(cls(\"dropdown-menu-group\"), classNames?.group)}\n heading={\n <Menu.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Menu.GroupLabel>\n }\n >\n {group.items.map((item, j) => renderMenuItem(item, index, j))}\n </Command.Group>\n ) : (\n group.items.map((item, j) => renderMenuItem(item, index, j))\n ),\n [cls, classNames, renderMenuItem]\n );\n\n const renderMenuInner = useCallback(\n () =>\n showSearch ? (\n <Command\n className={cls(\"dropdown-menu-container\")}\n disablePointerSelection={showSearch}\n defaultValue={\n highlightedItemKey ? String(highlightedItemKey) : undefined\n }\n >\n <Command.Input\n {...searchProps}\n key=\"search\"\n render={\n <Input allowClear className={cls(\"dropdown-menu-search\")} />\n }\n />\n {beforeList}\n <ScrollArea>\n <Command.List className={cls(\"dropdown-menu-list\")}>\n <Command.Empty className={cls(\"dropdown-menu-empty\")}>\n No results found.\n </Command.Empty>\n {itemGroups.map(renderGroupShowSearch)}\n </Command.List>\n </ScrollArea>\n {afterList}\n </Command>\n ) : (\n <div className={cls(\"dropdown-menu-container\")}>\n {beforeList}\n <ScrollArea>{itemGroups.map(renderGroup)}</ScrollArea>\n {afterList}\n </div>\n ),\n [\n showSearch,\n cls,\n highlightedItemKey,\n searchProps,\n beforeList,\n itemGroups,\n renderGroupShowSearch,\n afterList,\n renderGroup,\n ]\n );\n\n const BaseComponent = showSearch ? Popover : Menu;\n\n return (\n <BaseComponent.Root\n openOnHover={openOnHover}\n open={open}\n onOpenChange={onOpenChange}\n >\n <BaseComponent.Trigger\n render={children}\n ref={buttonRef}\n className={clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n antdCssVarClassname\n )}\n />\n <BaseComponent.Portal>\n <BaseComponent.Positioner\n side={baseUIPlacement.side}\n align={baseUIPlacement.align}\n sideOffset={4}\n className={clsx(cls(\"dropdown-menu-root\"), classNames?.root)}\n collisionAvoidance={DROPDOWN_COLLISION_AVOIDANCE}\n >\n <BaseComponent.Popup\n className={clsx(\n cls(\n \"dropdown-menu\",\n showCheckbox && \"dropdown-menu-show-checkbox\",\n popupMatchTriggerWidth && \"dropdown-menu-match-trigger-width\"\n ),\n className,\n classNames?.popup,\n antdCssVarClassname\n )}\n style={\n {\n \"--size-width\":\n size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n } as React.CSSProperties\n }\n >\n {renderMenuInner()}\n </BaseComponent.Popup>\n </BaseComponent.Positioner>\n </BaseComponent.Portal>\n </BaseComponent.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","className","itemRender","classNames","size","showSearch","searchProps","popupMatchTriggerWidth","beforeList","afterList","keepOpenOnSelect","highlightedItemKey","selectedItemKeys","showCheckbox","open","setOpen","useControlled","onOpenChange","useCallback","newValue","cls","useCls","antdCssVarClassname","useAntdCssVarClassname","baseUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","acc","current","renderMenuItem","item","i","j","jsx","DropdownMenuItem","e","DropdownMenuDivider","renderGroup","group","index","jsxs","Menu","clsx","renderGroupShowSearch","Command","renderMenuInner","createElement","Input","ScrollArea","BaseComponent","Popover","DROPDOWN_COLLISION_AVOIDANCE","PopupPanelSize"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { Command as p } from "../cmdk/index.js";
3
+ import { Menu as n } from "@base-ui-components/react/menu";
4
+ import { useCls as s } from "../utils/antdUtils.js";
5
+ import { clsx as a } from "../utils/cn.js";
6
+ const l = ({
7
+ inCombobox: r,
8
+ className: o
9
+ }) => {
10
+ const m = s(), e = r ? p.Separator : n.Separator;
11
+ return /* @__PURE__ */ t(e, { className: a(m("dropdown-menu-divider"), o) });
12
+ };
13
+ export {
14
+ l as DropdownMenuDivider
15
+ };
16
+ //# sourceMappingURL=divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.js","sources":["../../../src/components/dropdown-menu/divider.tsx"],"sourcesContent":["import { Command } from \"../cmdk\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { clsx, useCls } from \"../utils\";\n\nexport interface DropdownMenuDividerProps {\n inCombobox?: boolean;\n className?: string;\n}\n\nexport const DropdownMenuDivider = ({\n inCombobox,\n className,\n}: DropdownMenuDividerProps) => {\n const cls = useCls();\n const MenuSeparator = inCombobox ? Command.Separator : Menu.Separator;\n\n return (\n <MenuSeparator className={clsx(cls(\"dropdown-menu-divider\"), className)} />\n );\n};\n"],"names":["DropdownMenuDivider","inCombobox","className","cls","useCls","MenuSeparator","Command","Menu","jsx","clsx"],"mappings":";;;;;AASO,MAAMA,IAAsB,CAAC;AAAA,EAClC,YAAAC;AAAA,EACA,WAAAC;AACF,MAAgC;AAC9B,QAAMC,IAAMC,EAAO,GACbC,IAAgBJ,IAAaK,EAAQ,YAAYC,EAAK;AAG1D,SAAA,gBAAAC,EAACH,KAAc,WAAWI,EAAKN,EAAI,uBAAuB,GAAGD,CAAS,GAAG;AAE7E;"}
@@ -0,0 +1 @@
1
+ @layer components{.ds-dropdown-menu-item{padding:.375rem .75rem;border-radius:var(--ds-border-radius-sm);cursor:pointer;display:flex;align-items:center;transition:all .3s var(--ds-motion-ease-out)}.ds-dropdown-menu-item:focus{outline:none}.ds-dropdown-menu-item:hover,.ds-dropdown-menu-item[data-active=true],.ds-dropdown-menu-item[data-selected=true],.ds-dropdown-menu-item[data-highlighted=true]{background:var(--ds-control-item-bg-hover)}.ds-dropdown-menu-item:active,.ds-dropdown-menu-item:focus,.ds-dropdown-menu-item[data-focus=true]{background:var(--ds-control-item-bg-active);font-weight:500}.ds-dropdown-menu:not(.ds-dropdown-menu-show-checkbox) .ds-dropdown-menu-item[data-actual-selected=true]{background:var(--ds-control-item-bg-active);font-weight:500}.ds-dropdown-menu-item[data-disabled=true]{pointer-events:none;color:var(--ds-color-text-disabled)}.ds-dropdown-menu-item[data-danger=true]{color:var(--ds-color-error)}.ds-dropdown-menu-item[data-danger=true]:hover{background:var(--ds-color-error-bg)}.ds-dropdown-menu-item[data-danger=true]:active,.ds-dropdown-menu-item[data-danger=true]:focus,.ds-dropdown-menu-item[data-danger=true][data-focus=true]{background:var(--ds-color-error-bg-hover)}.ds-dropdown-menu-item .ds-checkbox-wrapper{margin-right:.5rem}.ds-dropdown-menu-item .ds-dropdown-menu-item-icon{display:flex;align-items:center;justify-content:center;margin-right:.5rem;font-size:1rem;color:var(--ds-color-icon)}[data-danger=true] :is(.ds-dropdown-menu-item .ds-dropdown-menu-item-icon){color:var(--ds-color-error)}}