@bioturing/components 0.34.0 → 0.35.3

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 (100) hide show
  1. package/dist/components/base-menu/component.d.ts +12 -0
  2. package/dist/components/base-menu/component.d.ts.map +1 -0
  3. package/dist/components/base-menu/component.js +69 -0
  4. package/dist/components/base-menu/component.js.map +1 -0
  5. package/dist/components/base-menu/index.d.ts +18 -0
  6. package/dist/components/base-menu/index.d.ts.map +1 -0
  7. package/dist/components/base-menu/index.js +11 -0
  8. package/dist/components/base-menu/index.js.map +1 -0
  9. package/dist/components/base-menu/item.css +1 -0
  10. package/dist/components/base-menu/item.d.ts +47 -0
  11. package/dist/components/base-menu/item.d.ts.map +1 -0
  12. package/dist/components/base-menu/item.js +73 -0
  13. package/dist/components/base-menu/item.js.map +1 -0
  14. package/dist/components/base-menu/style.css +1 -0
  15. package/dist/components/breadcrumb/component.d.ts +3 -2
  16. package/dist/components/breadcrumb/component.d.ts.map +1 -1
  17. package/dist/components/breadcrumb/component.js +138 -38
  18. package/dist/components/breadcrumb/component.js.map +1 -1
  19. package/dist/components/breadcrumb/index.d.ts +1 -0
  20. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  21. package/dist/components/breadcrumb/item.d.ts +3 -0
  22. package/dist/components/breadcrumb/item.d.ts.map +1 -0
  23. package/dist/components/breadcrumb/item.js +19 -0
  24. package/dist/components/breadcrumb/item.js.map +1 -0
  25. package/dist/components/breadcrumb/style.css +1 -1
  26. package/dist/components/breadcrumb/types.d.ts +9 -2
  27. package/dist/components/breadcrumb/types.d.ts.map +1 -1
  28. package/dist/components/code-block/types.d.ts +2 -2
  29. package/dist/components/code-block/types.d.ts.map +1 -1
  30. package/dist/components/combobox/component.d.ts +3 -26
  31. package/dist/components/combobox/component.d.ts.map +1 -1
  32. package/dist/components/combobox/component.js +326 -216
  33. package/dist/components/combobox/component.js.map +1 -1
  34. package/dist/components/combobox/style.css +1 -1
  35. package/dist/components/command-palette/component.js +6 -6
  36. package/dist/components/command-palette/component.js.map +1 -1
  37. package/dist/components/dropdown-menu/component.d.ts.map +1 -1
  38. package/dist/components/dropdown-menu/component.js +90 -87
  39. package/dist/components/dropdown-menu/component.js.map +1 -1
  40. package/dist/components/dropdown-menu/divider.d.ts.map +1 -1
  41. package/dist/components/dropdown-menu/divider.js +17 -10
  42. package/dist/components/dropdown-menu/divider.js.map +1 -1
  43. package/dist/components/dropdown-menu/item.d.ts +19 -9
  44. package/dist/components/dropdown-menu/item.d.ts.map +1 -1
  45. package/dist/components/dropdown-menu/item.js +82 -131
  46. package/dist/components/dropdown-menu/item.js.map +1 -1
  47. package/dist/components/dropdown-menu/style.css +1 -1
  48. package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -1
  49. package/dist/components/dropdown-menu/useDropdownMenu.js +60 -63
  50. package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
  51. package/dist/components/field/component.d.ts +5 -1
  52. package/dist/components/field/component.d.ts.map +1 -1
  53. package/dist/components/field/component.js +29 -20
  54. package/dist/components/field/component.js.map +1 -1
  55. package/dist/components/popup-panel/component.d.ts.map +1 -1
  56. package/dist/components/popup-panel/component.js +101 -101
  57. package/dist/components/popup-panel/component.js.map +1 -1
  58. package/dist/components/select-trigger/component.d.ts +71 -9
  59. package/dist/components/select-trigger/component.d.ts.map +1 -1
  60. package/dist/components/select-trigger/component.js +180 -139
  61. package/dist/components/select-trigger/component.js.map +1 -1
  62. package/dist/components/select-trigger/index.d.ts +1 -2
  63. package/dist/components/select-trigger/index.d.ts.map +1 -1
  64. package/dist/components/select-trigger/style.css +1 -1
  65. package/dist/components/table/component.d.ts.map +1 -1
  66. package/dist/components/table/component.js +53 -52
  67. package/dist/components/table/component.js.map +1 -1
  68. package/dist/components/theme-provider/style.css +1 -1
  69. package/dist/components/truncate/component.d.ts.map +1 -1
  70. package/dist/components/truncate/component.js +84 -80
  71. package/dist/components/truncate/component.js.map +1 -1
  72. package/dist/components/truncate/helpers.d.ts +9 -0
  73. package/dist/components/truncate/helpers.d.ts.map +1 -1
  74. package/dist/components/truncate/helpers.js +70 -40
  75. package/dist/components/truncate/helpers.js.map +1 -1
  76. package/dist/components/truncate/index.d.ts +1 -0
  77. package/dist/components/truncate/index.d.ts.map +1 -1
  78. package/dist/components/truncate/useOverflowDetection.d.ts +19 -0
  79. package/dist/components/truncate/useOverflowDetection.d.ts.map +1 -0
  80. package/dist/components/truncate/useOverflowDetection.js +54 -0
  81. package/dist/components/truncate/useOverflowDetection.js.map +1 -0
  82. package/dist/components/utils/WithRenderProp.d.ts.map +1 -1
  83. package/dist/components/utils/WithRenderProp.js +10 -10
  84. package/dist/components/utils/WithRenderProp.js.map +1 -1
  85. package/dist/components/utils/client.d.ts +1 -0
  86. package/dist/components/utils/client.d.ts.map +1 -1
  87. package/dist/components/utils/createSyntheticClickEvent.d.ts +13 -0
  88. package/dist/components/utils/createSyntheticClickEvent.d.ts.map +1 -0
  89. package/dist/components/utils/createSyntheticClickEvent.js +62 -0
  90. package/dist/components/utils/createSyntheticClickEvent.js.map +1 -0
  91. package/dist/components/vertical-collapsible-panel/component.d.ts +14 -0
  92. package/dist/components/vertical-collapsible-panel/component.d.ts.map +1 -1
  93. package/dist/components/vertical-collapsible-panel/component.js +82 -75
  94. package/dist/components/vertical-collapsible-panel/component.js.map +1 -1
  95. package/dist/components/vertical-collapsible-panel/style.css +1 -1
  96. package/dist/index.js +273 -265
  97. package/dist/index.js.map +1 -1
  98. package/dist/stats.html +1 -1
  99. package/package.json +5 -6
  100. package/dist/components/dropdown-menu/item.css +0 -1
@@ -1,35 +1,45 @@
1
1
  import { default as React } from 'react';
2
2
  import { DropdownMenuItemType } from './types';
3
3
  export interface DropdownMenuItemProps {
4
- /** The menu item data */
4
+ /**
5
+ * The menu item data
6
+ */
5
7
  item: DropdownMenuItemType & {
6
8
  type: "item";
7
9
  };
8
- /** Custom render function for the item */
10
+ /**
11
+ * Custom render function for the item
12
+ */
9
13
  itemRender?: (item: DropdownMenuItemType, props: React.HTMLAttributes<HTMLElement>) => React.ReactElement;
14
+ /**
15
+ * Custom render function for the item label
16
+ */
10
17
  itemLabelRender?: (item: DropdownMenuItemType & {
11
18
  type: "item";
12
19
  }, props: React.HTMLAttributes<HTMLElement>) => React.ReactElement;
13
- /** Additional props to pass to the item */
20
+ /**
21
+ * Additional props to pass to the item
22
+ */
14
23
  itemProps?: React.HTMLAttributes<HTMLElement>;
15
- /** Class names from parent DropdownMenu */
24
+ /**
25
+ * Class names from parent DropdownMenu
26
+ */
16
27
  classNames?: {
17
28
  item?: string;
18
29
  itemIcon?: string;
19
30
  itemText?: string;
20
31
  itemSuffix?: string;
21
32
  };
22
- onSelect?: (item: DropdownMenuItemType & {
33
+ /**
34
+ * Function to be called after the menu item is selected
35
+ */
36
+ afterSelect?: (item: DropdownMenuItemType & {
23
37
  type: "item";
24
38
  }) => void;
25
39
  /**
26
40
  * Whether the menu item is in a combobox
27
41
  */
28
42
  inCombobox?: boolean;
29
- /**
30
- * Whether the menu item is in a menu
31
- */
32
- renderAsNativeElement?: boolean;
33
43
  /**
34
44
  * Whether the menu item is selected (for combobox)
35
45
  * @default false
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/item.tsx"],"names":[],"mappings":"AACA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAIpD,OAAO,YAAY,CAAC;AAGpB,MAAM,WAAW,qBAAqB;IACpC,yBAAyB;IACzB,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC7C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,2CAA2C;IAC3C,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/E;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAsK5D,CAAC"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/item.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAOzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAKpD,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C;;OAEG;IACH,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC7C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9C;;OAEG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtE;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/E;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAqH5D,CAAC"}
@@ -1,153 +1,104 @@
1
1
  "use client";
2
- import { jsxs as x, Fragment as h, jsx as r } from "react/jsx-runtime";
3
- import { useMemo as M } from "react";
4
- import { Command as j } from "../cmdk/index.js";
5
- import { Menu as E } from "@base-ui-components/react/menu";
6
- import './item.css';/* empty css */
7
- import { Checkbox as g } from "antd";
8
- import { reactNodeToString as P } from "../utils/reactToString.js";
9
- import { useCls as m } from "../utils/antdUtils.js";
10
- import { clsx as e } from "../utils/cn.js";
11
- import { WithRenderProp as I } from "../utils/WithRenderProp.js";
12
- const J = ({
2
+ import { jsx as c } from "react/jsx-runtime";
3
+ import { useCallback as i, useMemo as x } from "react";
4
+ import { Command as y } from "../cmdk/index.js";
5
+ import { Menu as O } from "@base-ui-components/react/menu";
6
+ import { BaseMenuItem as S } from "../base-menu/item.js";
7
+ import C from "../utils/createSyntheticClickEvent.js";
8
+ import { reactNodeToString as w } from "../utils/reactToString.js";
9
+ import { useCls as E } from "../utils/antdUtils.js";
10
+ import { clsx as M } from "../utils/cn.js";
11
+ const z = ({
13
12
  item: o,
14
- inCombobox: u = !1,
15
- selected: s = !1,
16
- itemRender: c,
17
- itemLabelRender: p,
18
- itemProps: S = {},
13
+ inCombobox: e = !1,
14
+ selected: u = !1,
15
+ itemRender: d,
16
+ itemLabelRender: f,
17
+ itemProps: p = {},
19
18
  classNames: n,
20
- onSelect: v,
21
- showCheckbox: l,
22
- indeterminate: i,
23
- renderAsNativeElement: w,
24
- getItemKeywords: t
19
+ afterSelect: a,
20
+ showCheckbox: v,
21
+ indeterminate: k,
22
+ getItemKeywords: l
25
23
  }) => {
26
- const d = m(), y = M(
27
- () => u ? j.Item : E.Item,
28
- [u]
29
- ), f = M(() => ({
30
- className: e(
31
- d("dropdown-menu-item", u && "dropdown-menu-item-combobox"),
24
+ const t = E(), s = i(
25
+ (r) => {
26
+ if (o.onSelect)
27
+ o.onSelect(o);
28
+ else if (o.onClick)
29
+ if (typeof r == "object")
30
+ o.onClick(r);
31
+ else {
32
+ const b = C(null);
33
+ o.onClick(b);
34
+ }
35
+ a && a(o);
36
+ },
37
+ [a, o]
38
+ ), g = x(
39
+ () => l ? l(o) : [String(o.key), w(o.label)],
40
+ [l, o]
41
+ );
42
+ return d ? d(o, {
43
+ className: M(
44
+ t("dropdown-menu-item", e && "dropdown-menu-item-combobox"),
32
45
  n?.item,
33
46
  o.className
34
47
  ),
35
- disabled: o.disabled,
36
48
  "data-danger": o.danger,
37
- "data-actual-selected": s,
49
+ "data-actual-selected": u,
50
+ "data-value": typeof o.label == "string" ? o.label : String(o.key),
38
51
  ref: o.ref,
39
- onClick: o.onClick,
52
+ onClick: s,
40
53
  onMouseEnter: o.onMouseEnter,
41
54
  onMouseLeave: o.onMouseLeave,
42
55
  onMouseOver: o.onMouseOver,
43
56
  onMouseOut: o.onMouseOut,
44
- "data-value": typeof o.label == "string" ? o.label : String(o.key),
45
- render: c ? (a) => c(o, a) : void 0,
46
- children: u ? /* @__PURE__ */ x(h, { children: [
47
- l && /* @__PURE__ */ r(
48
- g,
49
- {
50
- checked: s,
51
- tabIndex: -1,
52
- indeterminate: i
53
- }
54
- ),
55
- o.icon && /* @__PURE__ */ r(
56
- "span",
57
- {
58
- className: e(
59
- d("dropdown-menu-item-icon"),
60
- n?.itemIcon
61
- ),
62
- children: o.icon
63
- }
64
- ),
65
- /* @__PURE__ */ r(
66
- I,
67
- {
68
- render: p ? (a) => p(o, a) : void 0,
69
- as: "span",
70
- className: e(
71
- d("dropdown-menu-item-text"),
72
- n?.itemText
73
- ),
74
- children: o.label
75
- }
76
- )
77
- ] }) : /* @__PURE__ */ x(h, { children: [
78
- l && /* @__PURE__ */ r(
79
- g,
80
- {
81
- checked: s,
82
- tabIndex: -1,
83
- indeterminate: i
84
- }
85
- ),
86
- o.icon && /* @__PURE__ */ r(
87
- "span",
88
- {
89
- className: e(
90
- d("dropdown-menu-item-icon"),
91
- n?.itemIcon
57
+ ...p
58
+ }) : /* @__PURE__ */ c(
59
+ S,
60
+ {
61
+ disabled: o.disabled,
62
+ danger: o.danger,
63
+ selected: u,
64
+ showCheckbox: v,
65
+ indeterminate: k,
66
+ icon: o.icon,
67
+ suffix: e ? void 0 : o.suffix,
68
+ classNames: {
69
+ root: M(
70
+ t(
71
+ "dropdown-menu-item",
72
+ e && "dropdown-menu-item-combobox"
92
73
  ),
93
- children: o.icon
94
- }
95
- ),
96
- /* @__PURE__ */ r(
97
- I,
98
- {
99
- render: p ? (a) => p(o, a) : void 0,
100
- as: "span",
101
- children: o.label
102
- }
103
- ),
104
- o.suffix && /* @__PURE__ */ r(
105
- "span",
74
+ n?.item,
75
+ o.className
76
+ ),
77
+ icon: n?.itemIcon,
78
+ text: n?.itemText,
79
+ suffix: n?.itemSuffix
80
+ },
81
+ labelRender: f ? (r) => f(o, r) : void 0,
82
+ ref: o.ref,
83
+ onMouseEnter: o.onMouseEnter,
84
+ onMouseLeave: o.onMouseLeave,
85
+ onMouseOver: o.onMouseOver,
86
+ onMouseOut: o.onMouseOut,
87
+ "data-value": typeof o.label == "string" ? o.label : String(o.key),
88
+ "data-actual-selected": u,
89
+ render: e ? /* @__PURE__ */ c(
90
+ y.Item,
106
91
  {
107
- className: e(
108
- d("dropdown-menu-item-suffix"),
109
- n?.itemSuffix
110
- ),
111
- children: o.suffix
92
+ value: String(o.key),
93
+ keywords: g || void 0,
94
+ onSelect: s
112
95
  }
113
- )
114
- ] })
115
- }), [
116
- n?.item,
117
- n?.itemIcon,
118
- n?.itemText,
119
- n?.itemSuffix,
120
- d,
121
- u,
122
- i,
123
- o,
124
- c,
125
- s,
126
- l,
127
- p
128
- ]), O = M(
129
- () => t ? t(o) : [String(o.key), P(o.label)],
130
- [t, o]
131
- );
132
- if (c)
133
- return c(o, {
134
- ...f,
135
- ...S
136
- });
137
- const { render: k, ...T } = f;
138
- return w ? k ? k(f) : /* @__PURE__ */ r("div", { onClick: v, ...T }) : /* @__PURE__ */ r(
139
- y,
140
- {
141
- value: String(o.key),
142
- keywords: O || void 0,
143
- onSelect: () => {
144
- v(o);
145
- },
146
- ...f
96
+ ) : /* @__PURE__ */ c(O.Item, { onClick: s }),
97
+ children: o.label
147
98
  }
148
99
  );
149
100
  };
150
101
  export {
151
- J as DropdownMenuItem
102
+ z as DropdownMenuItem
152
103
  };
153
104
  //# sourceMappingURL=item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sources":["../../../src/components/dropdown-menu/item.tsx"],"sourcesContent":["\"use client\";\nimport React, { Ref, useMemo } from \"react\";\nimport { clsx, reactNodeToString, useCls, WithRenderProp } from \"../utils\";\nimport type { DropdownMenuItemType } from \"./types\";\nimport { Command } from \"../cmdk\";\nimport { Menu } from \"@base-ui-components/react/menu\";\n\nimport \"./item.css\";\nimport { Checkbox } from \"antd\";\n\nexport interface DropdownMenuItemProps {\n /** The menu item data */\n item: DropdownMenuItemType & { type: \"item\" };\n /** Custom render function for the item */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n itemLabelRender?: (\n item: DropdownMenuItemType & { type: \"item\" },\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /** Additional props to pass to the item */\n itemProps?: React.HTMLAttributes<HTMLElement>;\n /** Class names from parent DropdownMenu */\n classNames?: {\n item?: string;\n itemIcon?: string;\n itemText?: string;\n itemSuffix?: string;\n };\n onSelect?: (item: DropdownMenuItemType & { type: \"item\" }) => void;\n /**\n * Whether the menu item is in a combobox\n */\n inCombobox?: boolean;\n /**\n * Whether the menu item is in a menu\n */\n renderAsNativeElement?: boolean;\n /**\n * Whether the menu item is selected (for combobox)\n * @default false\n */\n selected?: boolean;\n /**\n * Whether to show checkbox (only for decoration purpose)\n */\n showCheckbox?: boolean;\n /**\n * Whether the menu item checkbox is indeterminate (for combobox)\n * @default false\n */\n indeterminate?: boolean;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (item) => [String(item.key), reactNodeToString(item.label)]\n */\n getItemKeywords?: (item: DropdownMenuItemType & { type: \"item\" }) => string[];\n}\n\nexport const DropdownMenuItem: React.FC<DropdownMenuItemProps> = ({\n item,\n inCombobox = false,\n selected = false,\n itemRender,\n itemLabelRender,\n itemProps = {},\n classNames,\n onSelect,\n showCheckbox,\n indeterminate,\n renderAsNativeElement,\n getItemKeywords,\n}) => {\n const cls = useCls();\n\n const MenuItem = useMemo(\n () => (inCombobox ? Command.Item : Menu.Item),\n [inCombobox],\n );\n\n const props = useMemo(() => {\n return {\n className: clsx(\n cls(\"dropdown-menu-item\", inCombobox && \"dropdown-menu-item-combobox\"),\n classNames?.item,\n item.className,\n ),\n disabled: item.disabled,\n \"data-danger\": item.danger,\n \"data-actual-selected\": selected,\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 \"data-value\":\n typeof item.label === \"string\" ? item.label : String(item.key),\n render: itemRender\n ? (itemProps: React.HTMLAttributes<HTMLElement>) =>\n itemRender(item, itemProps)\n : undefined,\n children: inCombobox ? (\n <>\n {showCheckbox && (\n <Checkbox\n checked={selected}\n tabIndex={-1}\n indeterminate={indeterminate}\n />\n )}\n {item.icon && (\n <span\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon,\n )}\n >\n {item.icon}\n </span>\n )}\n <WithRenderProp\n render={\n itemLabelRender\n ? (props) => itemLabelRender(item, props)\n : undefined\n }\n as={\"span\"}\n className={clsx(\n cls(\"dropdown-menu-item-text\"),\n classNames?.itemText,\n )}\n >\n {item.label}\n </WithRenderProp>\n </>\n ) : (\n <>\n {showCheckbox && (\n <Checkbox\n checked={selected}\n tabIndex={-1}\n indeterminate={indeterminate}\n />\n )}\n {item.icon && (\n <span\n className={clsx(\n cls(\"dropdown-menu-item-icon\"),\n classNames?.itemIcon,\n )}\n >\n {item.icon}\n </span>\n )}\n <WithRenderProp\n render={\n itemLabelRender\n ? (props) => itemLabelRender(item, props)\n : undefined\n }\n as={\"span\"}\n >\n {item.label}\n </WithRenderProp>\n {item.suffix && (\n <span\n className={clsx(\n cls(\"dropdown-menu-item-suffix\"),\n classNames?.itemSuffix,\n )}\n >\n {item.suffix}\n </span>\n )}\n </>\n ),\n };\n }, [\n classNames?.item,\n classNames?.itemIcon,\n classNames?.itemText,\n classNames?.itemSuffix,\n cls,\n inCombobox,\n indeterminate,\n item,\n itemRender,\n selected,\n showCheckbox,\n itemLabelRender,\n ]);\n const keywords = useMemo(\n () =>\n getItemKeywords\n ? getItemKeywords(item)\n : [String(item.key), reactNodeToString(item.label)],\n [getItemKeywords, item],\n );\n // If custom render function is provided, use it\n if (itemRender) {\n return itemRender(item, {\n ...props,\n ...itemProps,\n });\n }\n const { render, ...restProps } = props;\n\n // Default rendering\n return renderAsNativeElement ? (\n render ? (\n render(props)\n ) : (\n <div onClick={onSelect} {...restProps} />\n )\n ) : (\n <MenuItem\n value={String(item.key)}\n keywords={keywords || undefined}\n onSelect={() => {\n onSelect(item);\n }}\n {...props}\n ></MenuItem>\n );\n};\n"],"names":["DropdownMenuItem","item","inCombobox","selected","itemRender","itemLabelRender","itemProps","classNames","onSelect","showCheckbox","indeterminate","renderAsNativeElement","getItemKeywords","cls","useCls","MenuItem","useMemo","Command","Menu","props","clsx","jsxs","Fragment","jsx","Checkbox","WithRenderProp","keywords","reactNodeToString","render","restProps"],"mappings":"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"}
1
+ {"version":3,"file":"item.js","sources":["../../../src/components/dropdown-menu/item.tsx"],"sourcesContent":["\"use client\";\nimport React, { Ref, useCallback, useMemo } from \"react\";\nimport {\n clsx,\n createSyntheticClickEvent,\n reactNodeToString,\n useCls,\n} from \"../utils\";\nimport type { DropdownMenuItemType } from \"./types\";\nimport { Command } from \"../cmdk\";\nimport { Menu } from \"@base-ui-components/react/menu\";\nimport { BaseMenuItem } from \"../base-menu\";\n\nexport interface DropdownMenuItemProps {\n /**\n * The menu item data\n */\n item: DropdownMenuItemType & { type: \"item\" };\n /**\n * Custom render function for the item\n */\n itemRender?: (\n item: DropdownMenuItemType,\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Custom render function for the item label\n */\n itemLabelRender?: (\n item: DropdownMenuItemType & { type: \"item\" },\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\n /**\n * Additional props to pass to the item\n */\n itemProps?: React.HTMLAttributes<HTMLElement>;\n /**\n * Class names from parent DropdownMenu\n */\n classNames?: {\n item?: string;\n itemIcon?: string;\n itemText?: string;\n itemSuffix?: string;\n };\n /**\n * Function to be called after the menu item is selected\n */\n afterSelect?: (item: DropdownMenuItemType & { type: \"item\" }) => void;\n /**\n * Whether the menu item is in a combobox\n */\n inCombobox?: boolean;\n /**\n * Whether the menu item is selected (for combobox)\n * @default false\n */\n selected?: boolean;\n /**\n * Whether to show checkbox (only for decoration purpose)\n */\n showCheckbox?: boolean;\n /**\n * Whether the menu item checkbox is indeterminate (for combobox)\n * @default false\n */\n indeterminate?: boolean;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (item) => [String(item.key), reactNodeToString(item.label)]\n */\n getItemKeywords?: (item: DropdownMenuItemType & { type: \"item\" }) => string[];\n}\n\nexport const DropdownMenuItem: React.FC<DropdownMenuItemProps> = ({\n item,\n inCombobox = false,\n selected = false,\n itemRender,\n itemLabelRender,\n itemProps = {},\n classNames,\n afterSelect,\n showCheckbox,\n indeterminate,\n getItemKeywords,\n}) => {\n const cls = useCls();\n\n const handler = useCallback(\n (e?: React.MouseEvent<HTMLElement, MouseEvent> | string) => {\n // onSelect has priority over onClick\n if (item.onSelect) {\n item.onSelect(item);\n } else if (item.onClick) {\n if (typeof e === \"object\") {\n item.onClick(e);\n } else {\n const event = createSyntheticClickEvent(null);\n item.onClick(event);\n }\n }\n if (afterSelect) afterSelect(item);\n },\n [afterSelect, item]\n );\n\n const keywords = useMemo(\n () =>\n getItemKeywords\n ? getItemKeywords(item)\n : [String(item.key), reactNodeToString(item.label)],\n [getItemKeywords, item]\n );\n\n // If custom render function is provided, use it\n if (itemRender) {\n return itemRender(item, {\n className: clsx(\n cls(\"dropdown-menu-item\", inCombobox && \"dropdown-menu-item-combobox\"),\n classNames?.item,\n item.className\n ),\n \"data-danger\": item.danger,\n \"data-actual-selected\": selected,\n \"data-value\":\n typeof item.label === \"string\" ? item.label : String(item.key),\n ref: item.ref as Ref<HTMLDivElement>,\n onClick: handler,\n onMouseEnter: item.onMouseEnter,\n onMouseLeave: item.onMouseLeave,\n onMouseOver: item.onMouseOver,\n onMouseOut: item.onMouseOut,\n ...itemProps,\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return (\n <BaseMenuItem\n // BaseMenuItem props\n disabled={item.disabled}\n danger={item.danger}\n selected={selected}\n showCheckbox={showCheckbox}\n indeterminate={indeterminate}\n icon={item.icon}\n suffix={!inCombobox ? item.suffix : undefined}\n classNames={{\n root: clsx(\n cls(\n \"dropdown-menu-item\",\n inCombobox && \"dropdown-menu-item-combobox\"\n ),\n classNames?.item,\n item.className\n ),\n icon: classNames?.itemIcon,\n text: classNames?.itemText,\n suffix: classNames?.itemSuffix,\n }}\n labelRender={\n itemLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n itemLabelRender(item, props)\n : undefined\n }\n ref={item.ref as Ref<HTMLDivElement>}\n onMouseEnter={item.onMouseEnter}\n onMouseLeave={item.onMouseLeave}\n onMouseOver={item.onMouseOver}\n onMouseOut={item.onMouseOut}\n data-value={\n typeof item.label === \"string\" ? item.label : String(item.key)\n }\n data-actual-selected={selected}\n // Render prop to use Base UI components\n render={\n inCombobox ? (\n <Command.Item\n value={String(item.key)}\n keywords={keywords || undefined}\n onSelect={handler}\n />\n ) : (\n <Menu.Item onClick={handler} />\n )\n }\n >\n {item.label}\n </BaseMenuItem>\n );\n};\n"],"names":["DropdownMenuItem","item","inCombobox","selected","itemRender","itemLabelRender","itemProps","classNames","afterSelect","showCheckbox","indeterminate","getItemKeywords","cls","useCls","handler","useCallback","e","event","createSyntheticClickEvent","keywords","useMemo","reactNodeToString","clsx","jsx","BaseMenuItem","props","Command","Menu"],"mappings":";;;;;;;;;;AA0EO,MAAMA,IAAoD,CAAC;AAAA,EAChE,MAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,UAAAC,IAAW;AAAA,EACX,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC,IAAY,CAAA;AAAA,EACZ,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,iBAAAC;AACF,MAAM;AACJ,QAAMC,IAAMC,EAAA,GAENC,IAAUC;AAAA,IACd,CAACC,MAA2D;AAE1D,UAAIf,EAAK;AACP,QAAAA,EAAK,SAASA,CAAI;AAAA,eACTA,EAAK;AACd,YAAI,OAAOe,KAAM;AACf,UAAAf,EAAK,QAAQe,CAAC;AAAA,aACT;AACL,gBAAMC,IAAQC,EAA0B,IAAI;AAC5C,UAAAjB,EAAK,QAAQgB,CAAK;AAAA,QACpB;AAEF,MAAIT,OAAyBP,CAAI;AAAA,IACnC;AAAA,IACA,CAACO,GAAaP,CAAI;AAAA,EAAA,GAGdkB,IAAWC;AAAA,IACf,MACET,IACIA,EAAgBV,CAAI,IACpB,CAAC,OAAOA,EAAK,GAAG,GAAGoB,EAAkBpB,EAAK,KAAK,CAAC;AAAA,IACtD,CAACU,GAAiBV,CAAI;AAAA,EAAA;AAIxB,SAAIG,IACKA,EAAWH,GAAM;AAAA,IACtB,WAAWqB;AAAA,MACTV,EAAI,sBAAsBV,KAAc,6BAA6B;AAAA,MACrEK,GAAY;AAAA,MACZN,EAAK;AAAA,IAAA;AAAA,IAEP,eAAeA,EAAK;AAAA,IACpB,wBAAwBE;AAAA,IACxB,cACE,OAAOF,EAAK,SAAU,WAAWA,EAAK,QAAQ,OAAOA,EAAK,GAAG;AAAA,IAC/D,KAAKA,EAAK;AAAA,IACV,SAASa;AAAA,IACT,cAAcb,EAAK;AAAA,IACnB,cAAcA,EAAK;AAAA,IACnB,aAAaA,EAAK;AAAA,IAClB,YAAYA,EAAK;AAAA,IACjB,GAAGK;AAAA,EAAA,CACiC,IAItC,gBAAAiB;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,UAAUvB,EAAK;AAAA,MACf,QAAQA,EAAK;AAAA,MACb,UAAAE;AAAA,MACA,cAAAM;AAAA,MACA,eAAAC;AAAA,MACA,MAAMT,EAAK;AAAA,MACX,QAASC,IAA2B,SAAdD,EAAK;AAAA,MAC3B,YAAY;AAAA,QACV,MAAMqB;AAAA,UACJV;AAAA,YACE;AAAA,YACAV,KAAc;AAAA,UAAA;AAAA,UAEhBK,GAAY;AAAA,UACZN,EAAK;AAAA,QAAA;AAAA,QAEP,MAAMM,GAAY;AAAA,QAClB,MAAMA,GAAY;AAAA,QAClB,QAAQA,GAAY;AAAA,MAAA;AAAA,MAEtB,aACEF,IACI,CAACoB,MACCpB,EAAgBJ,GAAMwB,CAAK,IAC7B;AAAA,MAEN,KAAKxB,EAAK;AAAA,MACV,cAAcA,EAAK;AAAA,MACnB,cAAcA,EAAK;AAAA,MACnB,aAAaA,EAAK;AAAA,MAClB,YAAYA,EAAK;AAAA,MACjB,cACE,OAAOA,EAAK,SAAU,WAAWA,EAAK,QAAQ,OAAOA,EAAK,GAAG;AAAA,MAE/D,wBAAsBE;AAAA,MAEtB,QACED,IACE,gBAAAqB;AAAA,QAACG,EAAQ;AAAA,QAAR;AAAA,UACC,OAAO,OAAOzB,EAAK,GAAG;AAAA,UACtB,UAAUkB,KAAY;AAAA,UACtB,UAAUL;AAAA,QAAA;AAAA,MAAA,IAGZ,gBAAAS,EAACI,EAAK,MAAL,EAAU,SAASb,EAAA,CAAS;AAAA,MAIhC,UAAAb,EAAK;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
@@ -1 +1 @@
1
- @layer components{.ds-dropdown-menu-root{z-index:var(--ds-z-index-dropdown)}.ds-dropdown-menu{box-shadow:var(--ds-box-shadow-secondary);border-radius:var(--ds-border-radius);background:var(--ds-color-bg-elevated);list-style:none;padding:.25rem;color:var(--ds-color-text);font-size:var(--ds-font-size);font-family:var(--ds-font-family);transition-property:transform,scale,opacity;transition-duration:.2s;transition-timing-function:var(--ds-motion-ease-out);transform-origin:var(--transform-origin);max-width:min(var(--size-width),var(--available-width));max-height:var(--available-height);display:flex;flex-direction:column}.ds-dropdown-menu[data-ending-style],.ds-dropdown-menu[data-starting-style]{transform:scale(.9);opacity:0}.ds-dropdown-menu:focus{outline:none}.ds-dropdown-menu .ds-dropdown-menu-container{flex-shrink:1;min-height:0;display:flex;flex-direction:column}.ds-dropdown-menu .ds-dropdown-menu-search{flex-shrink:0}.ds-dropdown-menu .ds-dropdown-menu-list,.ds-dropdown-menu .ds-dropdown-menu-list [cmdk-list-sizer]{flex-shrink:1;min-height:0;display:flex;flex-direction:column}}
1
+ @layer components{.ds-dropdown-menu-search{margin-bottom:.25rem}.ds-dropdown-menu-header{font-size:.75rem;font-weight:500;line-height:1rem;text-transform:uppercase;color:var(--ds-color-text-tertiary);padding:.75rem .75rem .25rem}.ds-dropdown-menu-header:first-child{padding-top:.5rem}.ds-dropdown-menu-empty{padding:.375rem .75rem;color:var(--ds-color-text-tertiary)}.ds-dropdown-menu-match-trigger-width{width:min(var(--anchor-width),var(--available-width))}.ds-dropdown-menu-container{display:flex;flex-direction:column;flex-shrink:1;min-height:0}}
@@ -1 +1 @@
1
- {"version":3,"file":"useDropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/useDropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAOlE,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC7C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/E;AAED,eAAO,MAAM,eAAe,GAAI,kJAW7B,oBAAoB;;2BAGZ,oBAAoB,KAAK,MAAM,KAAK,MAAM;yBAmFzC,iBAAiB,SAAS,MAAM;CA2D3C,CAAC"}
1
+ {"version":3,"file":"useDropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/useDropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAOlE,OAAO,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC7C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KACrC,KAAK,CAAC,YAAY,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/E;AAED,eAAO,MAAM,eAAe,GAAI,kJAW7B,oBAAoB;;2BAGZ,oBAAoB,KAAK,MAAM,KAAK,MAAM;yBAqEzC,iBAAiB,SAAS,MAAM;CA2D3C,CAAC"}
@@ -1,127 +1,124 @@
1
- import { jsx as n, jsxs as y } from "react/jsx-runtime";
1
+ import { jsx as t, jsxs as D } from "react/jsx-runtime";
2
2
  import { useCallback as m, useMemo as S } from "react";
3
3
  import { DropdownMenuItem as k } from "./item.js";
4
- import { DropdownMenuDivider as D } from "./divider.js";
5
- import { Menu as f } from "@base-ui-components/react";
4
+ import { DropdownMenuDivider as I } from "./divider.js";
5
+ import { Menu as b } from "@base-ui-components/react";
6
6
  import { Command as L } from "../cmdk/index.js";
7
- import { useCls as I } from "../utils/antdUtils.js";
8
- import { reactNodeToString as j } from "../utils/reactToString.js";
7
+ import './style.css';/* empty css */
8
+ import { useCls as j } from "../utils/antdUtils.js";
9
+ import { reactNodeToString as T } from "../utils/reactToString.js";
9
10
  import { clsx as d } from "../utils/cn.js";
10
- const Q = ({
11
- items: s,
12
- inCombobox: i = !1,
11
+ const U = ({
12
+ items: f,
13
+ inCombobox: u = !1,
13
14
  classNames: o = {},
14
- selectedItemKeys: a,
15
+ selectedItemKeys: s,
15
16
  keepOpenOnSelect: h,
16
- showCheckbox: G = !1,
17
- getItemKeywords: b = (l) => [String(l.key), j(l.label)],
18
- onOpenChange: g,
19
- itemRender: M,
20
- itemLabelRender: c
17
+ showCheckbox: a = !1,
18
+ getItemKeywords: g = (p) => [String(p.key), T(p.label)],
19
+ onOpenChange: G,
20
+ itemRender: y,
21
+ itemLabelRender: M
21
22
  }) => {
22
- const l = I(), u = m(
23
- (e, r, p) => e.type === "item" ? /* @__PURE__ */ n(
23
+ const p = j(), l = m(
24
+ (e, r, i) => e.type === "item" ? /* @__PURE__ */ t(
24
25
  k,
25
26
  {
26
27
  item: e,
27
- inCombobox: i,
28
- selected: a?.includes(e.key),
29
- onSelect: i ? e.onSelect ? e.onSelect : () => {
30
- const t = new MouseEvent("click", {
31
- bubbles: !0,
32
- cancelable: !0
33
- });
34
- e.onClick(t), h || g?.(!1);
35
- } : void 0,
36
- itemRender: M,
37
- showCheckbox: G,
38
- getItemKeywords: b,
39
- itemLabelRender: c,
28
+ inCombobox: u,
29
+ selected: s?.includes(e.key),
30
+ afterSelect: () => {
31
+ h || G?.(!1);
32
+ },
33
+ itemRender: y,
34
+ showCheckbox: a,
35
+ getItemKeywords: g,
36
+ itemLabelRender: M,
40
37
  classNames: {
41
38
  item: o.item,
42
39
  itemIcon: o.itemIcon,
43
40
  itemSuffix: o.itemSuffix
44
41
  }
45
42
  },
46
- r + "-" + p
47
- ) : e.type === "divider" ? /* @__PURE__ */ n(
48
- D,
43
+ r + "-" + i
44
+ ) : e.type === "divider" ? /* @__PURE__ */ t(
45
+ I,
49
46
  {
50
- inCombobox: i,
47
+ inCombobox: u,
51
48
  className: o?.divider
52
49
  },
53
- r + "-" + p
50
+ r + "-" + i
54
51
  ) : null,
55
52
  [
56
53
  o,
57
- M,
58
- g,
59
- i,
54
+ y,
55
+ G,
56
+ u,
60
57
  h,
58
+ s,
61
59
  a,
62
- G,
63
- b,
64
- c
60
+ g,
61
+ M
65
62
  ]
66
63
  ), v = m(
67
- (e, r) => /* @__PURE__ */ y(
68
- f.Group,
64
+ (e, r) => /* @__PURE__ */ D(
65
+ b.Group,
69
66
  {
70
- className: d(l("dropdown-menu-group"), o?.group),
67
+ className: d(p("dropdown-menu-group"), o?.group),
71
68
  children: [
72
- e.label && /* @__PURE__ */ n(
73
- f.GroupLabel,
69
+ e.label && /* @__PURE__ */ t(
70
+ b.GroupLabel,
74
71
  {
75
72
  className: d(
76
- l("dropdown-menu-header"),
73
+ p("dropdown-menu-header"),
77
74
  o?.groupLabel
78
75
  ),
79
- children: /* @__PURE__ */ n("span", { children: e.label })
76
+ children: /* @__PURE__ */ t("span", { children: e.label })
80
77
  }
81
78
  ),
82
- e.items.map((p, t) => u(p, r, t))
79
+ e.items.map((i, n) => l(i, r, n))
83
80
  ]
84
81
  },
85
82
  "group" + r
86
83
  ),
87
- [l, o, u]
84
+ [p, o, l]
88
85
  ), w = m(
89
- (e, r) => e.label ? /* @__PURE__ */ n(
86
+ (e, r) => e.label ? /* @__PURE__ */ t(
90
87
  L.Group,
91
88
  {
92
- className: d(l("dropdown-menu-group"), o?.group),
93
- heading: /* @__PURE__ */ n(
94
- f.GroupLabel,
89
+ className: d(p("dropdown-menu-group"), o?.group),
90
+ heading: /* @__PURE__ */ t(
91
+ "div",
95
92
  {
96
93
  className: d(
97
- l("dropdown-menu-header"),
94
+ p("dropdown-menu-header"),
98
95
  o?.groupLabel
99
96
  ),
100
- children: /* @__PURE__ */ n("span", { children: e.label })
97
+ children: /* @__PURE__ */ t("span", { children: e.label })
101
98
  }
102
99
  ),
103
- children: e.items.map((p, t) => u(p, r, t))
100
+ children: e.items.map((i, n) => l(i, r, n))
104
101
  },
105
102
  "group" + r
106
- ) : e.items.map((p, t) => u(p, r, t)),
107
- [l, o, u]
103
+ ) : e.items.map((i, n) => l(i, r, n)),
104
+ [p, o, l]
108
105
  );
109
106
  return {
110
107
  itemGroups: S(
111
- () => s.reduce((e, r) => (e.length === 0 && r.type !== "header" && e.push({
108
+ () => f.reduce((e, r) => (e.length === 0 && r.type !== "header" && e.push({
112
109
  label: null,
113
110
  items: []
114
111
  }), r.type === "header" ? e.push({
115
112
  label: r.title,
116
113
  items: []
117
114
  }) : (r.type === "item" || r.type === "divider") && e.length > 0 && e[e.length - 1].items.push(r), e), []),
118
- [s]
115
+ [f]
119
116
  ),
120
- renderMenuItem: u,
121
- renderGroup: i ? w : v
117
+ renderMenuItem: l,
118
+ renderGroup: u ? w : v
122
119
  };
123
120
  };
124
121
  export {
125
- Q as useDropdownMenu
122
+ U as useDropdownMenu
126
123
  };
127
124
  //# sourceMappingURL=useDropdownMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDropdownMenu.js","sources":["../../../src/components/dropdown-menu/useDropdownMenu.tsx"],"sourcesContent":["import { useMemo, useCallback } from \"react\";\nimport { DropdownMenuItemType, DropdownMenuGroup } from \"./types\";\nimport { DropdownMenuItem } from \"./item\";\nimport { DropdownMenuDivider } from \"./divider\";\nimport { reactNodeToString, clsx, useCls } from \"../utils\";\nimport { Menu } from \"@base-ui-components/react\";\nimport { Command } from \"../cmdk\";\n\nexport interface UseDropdownMenuProps {\n /**\n * Callback function to handle the open state change of the dropdown menu.\n */\n onOpenChange?: (open: boolean) => void;\n items: DropdownMenuItemType[];\n inCombobox?: boolean;\n classNames?: {\n item?: string;\n itemIcon?: string;\n itemSuffix?: string;\n group?: string;\n groupLabel?: string;\n divider?: 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 * Custom render function for menu item labels\n */\n itemLabelRender?: (\n item: DropdownMenuItemType & { type: \"item\" },\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\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 * Function to extract keywords from the item for search filtering\n * @default (item) => [String(item.key), reactNodeToString(item.label)]\n */\n getItemKeywords?: (item: DropdownMenuItemType & { type: \"item\" }) => string[];\n}\n\nexport const useDropdownMenu = ({\n items,\n inCombobox = false,\n classNames = {},\n selectedItemKeys,\n keepOpenOnSelect,\n showCheckbox = false,\n getItemKeywords = (item) => [String(item.key), reactNodeToString(item.label)],\n onOpenChange,\n itemRender,\n itemLabelRender,\n}: UseDropdownMenuProps) => {\n const cls = useCls();\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={inCombobox}\n selected={selectedItemKeys?.includes(item.key)}\n onSelect={\n inCombobox\n ? item.onSelect\n ? item.onSelect\n : () => {\n const e = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n }) as unknown as React.MouseEvent<\n HTMLElement,\n MouseEvent\n >;\n item.onClick(e);\n if (!keepOpenOnSelect) onOpenChange?.(false);\n }\n : undefined\n }\n itemRender={itemRender}\n showCheckbox={showCheckbox}\n getItemKeywords={getItemKeywords}\n itemLabelRender={itemLabelRender}\n classNames={{\n item: classNames.item,\n itemIcon: classNames.itemIcon,\n itemSuffix: classNames.itemSuffix,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={i + \"-\" + j}\n inCombobox={inCombobox}\n className={classNames?.divider}\n />\n );\n }\n return null;\n },\n [\n classNames,\n itemRender,\n onOpenChange,\n inCombobox,\n keepOpenOnSelect,\n selectedItemKeys,\n showCheckbox,\n getItemKeywords,\n itemLabelRender,\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 renderGroupCombobox = 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 itemGroups = useMemo(\n () =>\n 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 [items]\n );\n return {\n itemGroups,\n renderMenuItem,\n renderGroup: inCombobox ? renderGroupCombobox : renderGroup,\n };\n};\n"],"names":["useDropdownMenu","items","inCombobox","classNames","selectedItemKeys","keepOpenOnSelect","showCheckbox","getItemKeywords","item","reactNodeToString","onOpenChange","itemRender","itemLabelRender","cls","useCls","renderMenuItem","useCallback","i","j","jsx","DropdownMenuItem","e","DropdownMenuDivider","renderGroup","group","index","jsxs","Menu","clsx","renderGroupCombobox","Command","useMemo","acc","current"],"mappings":"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"}
1
+ {"version":3,"file":"useDropdownMenu.js","sources":["../../../src/components/dropdown-menu/useDropdownMenu.tsx"],"sourcesContent":["import { useMemo, useCallback } from \"react\";\nimport { DropdownMenuItemType, DropdownMenuGroup } from \"./types\";\nimport { DropdownMenuItem } from \"./item\";\nimport { DropdownMenuDivider } from \"./divider\";\nimport { reactNodeToString, clsx, useCls } from \"../utils\";\nimport { Menu } from \"@base-ui-components/react\";\nimport { Command } from \"../cmdk\";\n\nimport \"./style.css\";\n\nexport interface UseDropdownMenuProps {\n /**\n * Callback function to handle the open state change of the dropdown menu.\n */\n onOpenChange?: (open: boolean) => void;\n items: DropdownMenuItemType[];\n inCombobox?: boolean;\n classNames?: {\n item?: string;\n itemIcon?: string;\n itemSuffix?: string;\n group?: string;\n groupLabel?: string;\n divider?: 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 * Custom render function for menu item labels\n */\n itemLabelRender?: (\n item: DropdownMenuItemType & { type: \"item\" },\n props: React.HTMLAttributes<HTMLElement>\n ) => React.ReactElement;\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 * Function to extract keywords from the item for search filtering\n * @default (item) => [String(item.key), reactNodeToString(item.label)]\n */\n getItemKeywords?: (item: DropdownMenuItemType & { type: \"item\" }) => string[];\n}\n\nexport const useDropdownMenu = ({\n items,\n inCombobox = false,\n classNames = {},\n selectedItemKeys,\n keepOpenOnSelect,\n showCheckbox = false,\n getItemKeywords = (item) => [String(item.key), reactNodeToString(item.label)],\n onOpenChange,\n itemRender,\n itemLabelRender,\n}: UseDropdownMenuProps) => {\n const cls = useCls();\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={inCombobox}\n selected={selectedItemKeys?.includes(item.key)}\n afterSelect={() => {\n if (!keepOpenOnSelect) onOpenChange?.(false);\n }}\n itemRender={itemRender}\n showCheckbox={showCheckbox}\n getItemKeywords={getItemKeywords}\n itemLabelRender={itemLabelRender}\n classNames={{\n item: classNames.item,\n itemIcon: classNames.itemIcon,\n itemSuffix: classNames.itemSuffix,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={i + \"-\" + j}\n inCombobox={inCombobox}\n className={classNames?.divider}\n />\n );\n }\n return null;\n },\n [\n classNames,\n itemRender,\n onOpenChange,\n inCombobox,\n keepOpenOnSelect,\n selectedItemKeys,\n showCheckbox,\n getItemKeywords,\n itemLabelRender,\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 renderGroupCombobox = 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 <div\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </div>\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 itemGroups = useMemo(\n () =>\n 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 [items]\n );\n return {\n itemGroups,\n renderMenuItem,\n renderGroup: inCombobox ? renderGroupCombobox : renderGroup,\n };\n};\n"],"names":["useDropdownMenu","items","inCombobox","classNames","selectedItemKeys","keepOpenOnSelect","showCheckbox","getItemKeywords","item","reactNodeToString","onOpenChange","itemRender","itemLabelRender","cls","useCls","renderMenuItem","useCallback","i","j","jsx","DropdownMenuItem","DropdownMenuDivider","renderGroup","group","index","jsxs","Menu","clsx","renderGroupCombobox","Command","useMemo","acc","current"],"mappings":"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"}
@@ -21,6 +21,10 @@ interface BaseFieldProps extends React.HTMLAttributes<HTMLDivElement> {
21
21
  * @default true
22
22
  */
23
23
  colon?: boolean;
24
+ /**
25
+ * Props for the label element
26
+ */
27
+ labelProps?: React.HTMLAttributes<HTMLLabelElement>;
24
28
  }
25
29
  type InputFieldProps = BaseFieldProps & {
26
30
  type?: "input";
@@ -34,7 +38,7 @@ export type FieldProps<T extends FieldType = "input"> = T extends "input" ? Inpu
34
38
  /**
35
39
  * Generic Field component that forwards ref to Input or Select
36
40
  */
37
- declare const FieldInner: <T extends FieldType>({ label, className, size, colon, type, ...rest }: FieldProps<T>, ref: ForwardedRef<RefType<T>>) => import("react/jsx-runtime").JSX.Element;
41
+ declare const FieldInner: <T extends FieldType>({ label, className, size, colon, type, labelProps, ...rest }: FieldProps<T>, ref: ForwardedRef<RefType<T>>) => import("react/jsx-runtime").JSX.Element;
38
42
  export declare const Field: <T extends FieldType>(props: FieldProps<T> & {
39
43
  ref?: ForwardedRef<RefType<T>>;
40
44
  }) => ReturnType<typeof FieldInner<T>>;