@locusgraph/components 0.2.0 → 0.2.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 (102) hide show
  1. package/dist/action/button-group.js +148 -17
  2. package/dist/action/button.js +91 -27
  3. package/dist/action/toggle-group.js +176 -12
  4. package/dist/action/toggle.js +70 -17
  5. package/dist/display/avatar.js +118 -7
  6. package/dist/display/badge.js +74 -20
  7. package/dist/display/chart/chart-container.js +205 -45
  8. package/dist/display/chart/chart-legend.js +79 -14
  9. package/dist/display/chart/chart-tooltip.js +211 -40
  10. package/dist/display/chat/attachment/attachment-parts.js +222 -13
  11. package/dist/display/chat/attachment/attachment.js +210 -28
  12. package/dist/display/chat/bubble.js +225 -37
  13. package/dist/display/chat/marker.js +143 -15
  14. package/dist/display/chat/message-scroller.js +276 -14
  15. package/dist/display/chat/message.js +238 -13
  16. package/dist/display/content/item.js +448 -47
  17. package/dist/display/content/kbd.js +78 -5
  18. package/dist/display/media/aspect-ratio.js +27 -3
  19. package/dist/display/media/carousel-controls.js +162 -11
  20. package/dist/display/media/carousel.js +325 -65
  21. package/dist/display/rule-grid/rule-grid.js +309 -29
  22. package/dist/display/separator.js +56 -3
  23. package/dist/display/skeletons/layouts/skeleton-rule-grid.js +79 -6
  24. package/dist/display/skeletons/layouts/skeleton-table.js +163 -5
  25. package/dist/display/skeletons/shapes/skeleton-avatar.js +95 -13
  26. package/dist/display/skeletons/shapes/skeleton-button.js +95 -13
  27. package/dist/display/skeletons/shapes/skeleton-text.js +78 -7
  28. package/dist/display/skeletons/skeleton-parts.js +63 -6
  29. package/dist/display/status/alert.js +136 -18
  30. package/dist/display/status/empty.js +250 -22
  31. package/dist/display/status/progress.js +116 -16
  32. package/dist/display/status/skeleton.js +40 -3
  33. package/dist/display/status/spinner.js +41 -3
  34. package/dist/display/table.js +310 -17
  35. package/dist/feedback/toaster.js +98 -21
  36. package/dist/form/advanced/calendar-day-button.js +89 -12
  37. package/dist/form/advanced/calendar.js +349 -56
  38. package/dist/form/advanced/combobox/combobox-chips.js +151 -8
  39. package/dist/form/advanced/combobox/combobox-items.js +239 -14
  40. package/dist/form/advanced/combobox/combobox.js +386 -13
  41. package/dist/form/advanced/input-otp.js +201 -11
  42. package/dist/form/choice/checkbox.js +58 -3
  43. package/dist/form/choice/radio-group.js +94 -5
  44. package/dist/form/choice/select.js +479 -25
  45. package/dist/form/choice/slider.js +118 -4
  46. package/dist/form/choice/switch.js +53 -3
  47. package/dist/form/field/field-error.js +117 -14
  48. package/dist/form/field/field-separator.js +70 -3
  49. package/dist/form/field/field-set.js +85 -5
  50. package/dist/form/field/field-text.js +116 -7
  51. package/dist/form/field/field.js +137 -25
  52. package/dist/form/hook-form/form.js +338 -40
  53. package/dist/form/input-group.js +297 -47
  54. package/dist/form/input.js +47 -3
  55. package/dist/form/label.js +42 -3
  56. package/dist/form/native-select.js +147 -7
  57. package/dist/form/textarea.js +41 -3
  58. package/dist/layout/accordion.js +165 -8
  59. package/dist/layout/collapsible.js +75 -7
  60. package/dist/layout/resizable.js +122 -7
  61. package/dist/layout/scroll/direction.js +25 -3
  62. package/dist/layout/scroll/scroll-area.js +138 -5
  63. package/dist/layout/sidebar/sidebar-context.js +184 -51
  64. package/dist/layout/sidebar/sidebar-menu-sub.js +219 -14
  65. package/dist/layout/sidebar/sidebar-menu.js +319 -38
  66. package/dist/layout/sidebar/sidebar-sections.js +369 -22
  67. package/dist/layout/sidebar/sidebar.js +384 -28
  68. package/dist/layout/tabs.js +183 -18
  69. package/dist/layout/use-mobile.js +23 -10
  70. package/dist/navigation/breadcrumb.js +301 -17
  71. package/dist/navigation/menubar/menubar-items.js +322 -16
  72. package/dist/navigation/menubar/menubar-sub.js +125 -7
  73. package/dist/navigation/menubar/menubar.js +213 -13
  74. package/dist/navigation/navigation-menu.js +366 -18
  75. package/dist/navigation/pagination.js +328 -20
  76. package/dist/overlay/alert-dialog.js +485 -26
  77. package/dist/overlay/context-menu/context-menu-items.js +322 -16
  78. package/dist/overlay/context-menu/context-menu-sub.js +125 -7
  79. package/dist/overlay/context-menu/context-menu.js +140 -11
  80. package/dist/overlay/dialog.js +405 -24
  81. package/dist/overlay/floating/command.js +423 -20
  82. package/dist/overlay/floating/drawer.js +354 -22
  83. package/dist/overlay/floating/hover-card.js +107 -7
  84. package/dist/overlay/menu/dropdown-menu-choice.js +149 -7
  85. package/dist/overlay/menu/dropdown-menu-item.js +174 -9
  86. package/dist/overlay/menu/dropdown-menu-sub.js +124 -7
  87. package/dist/overlay/menu/dropdown-menu.js +147 -12
  88. package/dist/overlay/popover.js +106 -7
  89. package/dist/overlay/sheet.js +379 -26
  90. package/dist/overlay/tooltip.js +145 -9
  91. package/dist/shell/app-header.js +81 -5
  92. package/dist/shell/app-shell.js +58 -3
  93. package/dist/shell/breadcrumbs.js +102 -12
  94. package/dist/shell/docs/docs-header.js +210 -10
  95. package/dist/shell/docs/docs-shell.js +100 -3
  96. package/dist/shell/docs/docs-sidebar.js +88 -7
  97. package/dist/shell/docs/on-this-page.js +78 -7
  98. package/dist/shell/docs/use-active-section.js +88 -42
  99. package/dist/shell/navigation/app-sidebar.js +188 -6
  100. package/dist/shell/navigation/nav-group.js +161 -10
  101. package/dist/shell/theme-toggle.js +51 -4
  102. package/package.json +2 -2
@@ -1,34 +1,437 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { Search as SearchIcon } from "@carbon/icons-react";
4
5
  import { Command as CommandPrimitive } from "cmdk";
5
6
  import { cn } from "cn";
7
+ import * as React from "react";
6
8
  import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "../dialog.js";
7
- function Command({ className, ...props }) {
8
- return (_jsx(CommandPrimitive, { "data-slot": "command", className: cn("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground", className), ...props }));
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ function Command(t0) {
11
+ const $ = _c(8);
12
+ let className;
13
+ let props;
14
+ if ($[0] !== t0) {
15
+ ({
16
+ className,
17
+ ...props
18
+ } = t0);
19
+ $[0] = t0;
20
+ $[1] = className;
21
+ $[2] = props;
22
+ } else {
23
+ className = $[1];
24
+ props = $[2];
25
+ }
26
+ let t1;
27
+ if ($[3] !== className) {
28
+ t1 = cn("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground", className);
29
+ $[3] = className;
30
+ $[4] = t1;
31
+ } else {
32
+ t1 = $[4];
33
+ }
34
+ let t2;
35
+ if ($[5] !== props || $[6] !== t1) {
36
+ t2 = /*#__PURE__*/_jsx(CommandPrimitive, {
37
+ "data-slot": "command",
38
+ className: t1,
39
+ ...props
40
+ });
41
+ $[5] = props;
42
+ $[6] = t1;
43
+ $[7] = t2;
44
+ } else {
45
+ t2 = $[7];
46
+ }
47
+ return t2;
9
48
  }
10
- function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, className, showCloseButton = false, ...props }) {
11
- return (_jsxs(Dialog, { ...props, children: [_jsxs(DialogHeader, { className: "sr-only", children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsx(DialogContent, { className: cn("overflow-hidden p-0", className), showCloseButton: showCloseButton, children: _jsx(Command, { className: "**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:py-2", children: children }) })] }));
49
+ function CommandDialog(t0) {
50
+ const $ = _c(26);
51
+ let children;
52
+ let className;
53
+ let props;
54
+ let t1;
55
+ let t2;
56
+ let t3;
57
+ if ($[0] !== t0) {
58
+ ({
59
+ title: t1,
60
+ description: t2,
61
+ children,
62
+ className,
63
+ showCloseButton: t3,
64
+ ...props
65
+ } = t0);
66
+ $[0] = t0;
67
+ $[1] = children;
68
+ $[2] = className;
69
+ $[3] = props;
70
+ $[4] = t1;
71
+ $[5] = t2;
72
+ $[6] = t3;
73
+ } else {
74
+ children = $[1];
75
+ className = $[2];
76
+ props = $[3];
77
+ t1 = $[4];
78
+ t2 = $[5];
79
+ t3 = $[6];
80
+ }
81
+ const title = t1 === undefined ? "Command Palette" : t1;
82
+ const description = t2 === undefined ? "Search for a command to run..." : t2;
83
+ const showCloseButton = t3 === undefined ? false : t3;
84
+ let t4;
85
+ if ($[7] !== title) {
86
+ t4 = /*#__PURE__*/_jsx(DialogTitle, {
87
+ children: title
88
+ });
89
+ $[7] = title;
90
+ $[8] = t4;
91
+ } else {
92
+ t4 = $[8];
93
+ }
94
+ let t5;
95
+ if ($[9] !== description) {
96
+ t5 = /*#__PURE__*/_jsx(DialogDescription, {
97
+ children: description
98
+ });
99
+ $[9] = description;
100
+ $[10] = t5;
101
+ } else {
102
+ t5 = $[10];
103
+ }
104
+ let t6;
105
+ if ($[11] !== t4 || $[12] !== t5) {
106
+ t6 = /*#__PURE__*/_jsxs(DialogHeader, {
107
+ className: "sr-only",
108
+ children: [t4, t5]
109
+ });
110
+ $[11] = t4;
111
+ $[12] = t5;
112
+ $[13] = t6;
113
+ } else {
114
+ t6 = $[13];
115
+ }
116
+ let t7;
117
+ if ($[14] !== className) {
118
+ t7 = cn("overflow-hidden p-0", className);
119
+ $[14] = className;
120
+ $[15] = t7;
121
+ } else {
122
+ t7 = $[15];
123
+ }
124
+ let t8;
125
+ if ($[16] !== children) {
126
+ t8 = /*#__PURE__*/_jsx(Command, {
127
+ className: "**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:py-2",
128
+ children: children
129
+ });
130
+ $[16] = children;
131
+ $[17] = t8;
132
+ } else {
133
+ t8 = $[17];
134
+ }
135
+ let t9;
136
+ if ($[18] !== showCloseButton || $[19] !== t7 || $[20] !== t8) {
137
+ t9 = /*#__PURE__*/_jsx(DialogContent, {
138
+ className: t7,
139
+ showCloseButton: showCloseButton,
140
+ children: t8
141
+ });
142
+ $[18] = showCloseButton;
143
+ $[19] = t7;
144
+ $[20] = t8;
145
+ $[21] = t9;
146
+ } else {
147
+ t9 = $[21];
148
+ }
149
+ let t10;
150
+ if ($[22] !== props || $[23] !== t6 || $[24] !== t9) {
151
+ t10 = /*#__PURE__*/_jsxs(Dialog, {
152
+ ...props,
153
+ children: [t6, t9]
154
+ });
155
+ $[22] = props;
156
+ $[23] = t6;
157
+ $[24] = t9;
158
+ $[25] = t10;
159
+ } else {
160
+ t10 = $[25];
161
+ }
162
+ return t10;
12
163
  }
13
- function CommandInput({ className, ...props }) {
14
- return (_jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-10 items-center gap-2 border-b px-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), _jsx(CommandPrimitive.Input, { "data-slot": "command-input", className: cn("flex h-full w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50", className), ...props })] }));
164
+ function CommandInput(t0) {
165
+ const $ = _c(9);
166
+ let className;
167
+ let props;
168
+ if ($[0] !== t0) {
169
+ ({
170
+ className,
171
+ ...props
172
+ } = t0);
173
+ $[0] = t0;
174
+ $[1] = className;
175
+ $[2] = props;
176
+ } else {
177
+ className = $[1];
178
+ props = $[2];
179
+ }
180
+ let t1;
181
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
182
+ t1 = /*#__PURE__*/_jsx(SearchIcon, {
183
+ className: "size-4 shrink-0 opacity-50"
184
+ });
185
+ $[3] = t1;
186
+ } else {
187
+ t1 = $[3];
188
+ }
189
+ let t2;
190
+ if ($[4] !== className) {
191
+ t2 = cn("flex h-full w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50", className);
192
+ $[4] = className;
193
+ $[5] = t2;
194
+ } else {
195
+ t2 = $[5];
196
+ }
197
+ let t3;
198
+ if ($[6] !== props || $[7] !== t2) {
199
+ t3 = /*#__PURE__*/_jsxs("div", {
200
+ "data-slot": "command-input-wrapper",
201
+ className: "flex h-10 items-center gap-2 border-b px-3",
202
+ children: [t1, /*#__PURE__*/_jsx(CommandPrimitive.Input, {
203
+ "data-slot": "command-input",
204
+ className: t2,
205
+ ...props
206
+ })]
207
+ });
208
+ $[6] = props;
209
+ $[7] = t2;
210
+ $[8] = t3;
211
+ } else {
212
+ t3 = $[8];
213
+ }
214
+ return t3;
15
215
  }
16
- function CommandList({ className, ...props }) {
17
- return (_jsx(CommandPrimitive.List, { "data-slot": "command-list", className: cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className), ...props }));
216
+ function CommandList(t0) {
217
+ const $ = _c(8);
218
+ let className;
219
+ let props;
220
+ if ($[0] !== t0) {
221
+ ({
222
+ className,
223
+ ...props
224
+ } = t0);
225
+ $[0] = t0;
226
+ $[1] = className;
227
+ $[2] = props;
228
+ } else {
229
+ className = $[1];
230
+ props = $[2];
231
+ }
232
+ let t1;
233
+ if ($[3] !== className) {
234
+ t1 = cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className);
235
+ $[3] = className;
236
+ $[4] = t1;
237
+ } else {
238
+ t1 = $[4];
239
+ }
240
+ let t2;
241
+ if ($[5] !== props || $[6] !== t1) {
242
+ t2 = /*#__PURE__*/_jsx(CommandPrimitive.List, {
243
+ "data-slot": "command-list",
244
+ className: t1,
245
+ ...props
246
+ });
247
+ $[5] = props;
248
+ $[6] = t1;
249
+ $[7] = t2;
250
+ } else {
251
+ t2 = $[7];
252
+ }
253
+ return t2;
18
254
  }
19
- function CommandEmpty({ ...props }) {
20
- return (_jsx(CommandPrimitive.Empty, { "data-slot": "command-empty", className: "py-6 text-center text-sm", ...props }));
255
+ function CommandEmpty(t0) {
256
+ const $ = _c(4);
257
+ let props;
258
+ if ($[0] !== t0) {
259
+ ({
260
+ ...props
261
+ } = t0);
262
+ $[0] = t0;
263
+ $[1] = props;
264
+ } else {
265
+ props = $[1];
266
+ }
267
+ let t1;
268
+ if ($[2] !== props) {
269
+ t1 = /*#__PURE__*/_jsx(CommandPrimitive.Empty, {
270
+ "data-slot": "command-empty",
271
+ className: "py-6 text-center text-sm",
272
+ ...props
273
+ });
274
+ $[2] = props;
275
+ $[3] = t1;
276
+ } else {
277
+ t1 = $[3];
278
+ }
279
+ return t1;
21
280
  }
22
- function CommandGroup({ className, ...props }) {
23
- return (_jsx(CommandPrimitive.Group, { "data-slot": "command-group", className: cn("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:eyebrow [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:pt-2 [&_[cmdk-group-heading]]:pb-1", className), ...props }));
281
+ function CommandGroup(t0) {
282
+ const $ = _c(8);
283
+ let className;
284
+ let props;
285
+ if ($[0] !== t0) {
286
+ ({
287
+ className,
288
+ ...props
289
+ } = t0);
290
+ $[0] = t0;
291
+ $[1] = className;
292
+ $[2] = props;
293
+ } else {
294
+ className = $[1];
295
+ props = $[2];
296
+ }
297
+ let t1;
298
+ if ($[3] !== className) {
299
+ t1 = cn("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:eyebrow [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:pt-2 [&_[cmdk-group-heading]]:pb-1", className);
300
+ $[3] = className;
301
+ $[4] = t1;
302
+ } else {
303
+ t1 = $[4];
304
+ }
305
+ let t2;
306
+ if ($[5] !== props || $[6] !== t1) {
307
+ t2 = /*#__PURE__*/_jsx(CommandPrimitive.Group, {
308
+ "data-slot": "command-group",
309
+ className: t1,
310
+ ...props
311
+ });
312
+ $[5] = props;
313
+ $[6] = t1;
314
+ $[7] = t2;
315
+ } else {
316
+ t2 = $[7];
317
+ }
318
+ return t2;
24
319
  }
25
- function CommandSeparator({ className, ...props }) {
26
- return (_jsx(CommandPrimitive.Separator, { "data-slot": "command-separator", className: cn("-mx-1 h-px bg-border", className), ...props }));
320
+ function CommandSeparator(t0) {
321
+ const $ = _c(8);
322
+ let className;
323
+ let props;
324
+ if ($[0] !== t0) {
325
+ ({
326
+ className,
327
+ ...props
328
+ } = t0);
329
+ $[0] = t0;
330
+ $[1] = className;
331
+ $[2] = props;
332
+ } else {
333
+ className = $[1];
334
+ props = $[2];
335
+ }
336
+ let t1;
337
+ if ($[3] !== className) {
338
+ t1 = cn("-mx-1 h-px bg-border", className);
339
+ $[3] = className;
340
+ $[4] = t1;
341
+ } else {
342
+ t1 = $[4];
343
+ }
344
+ let t2;
345
+ if ($[5] !== props || $[6] !== t1) {
346
+ t2 = /*#__PURE__*/_jsx(CommandPrimitive.Separator, {
347
+ "data-slot": "command-separator",
348
+ className: t1,
349
+ ...props
350
+ });
351
+ $[5] = props;
352
+ $[6] = t1;
353
+ $[7] = t2;
354
+ } else {
355
+ t2 = $[7];
356
+ }
357
+ return t2;
27
358
  }
28
- function CommandItem({ className, ...props }) {
29
- return (_jsx(CommandPrimitive.Item, { "data-slot": "command-item", className: cn("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props }));
359
+ function CommandItem(t0) {
360
+ const $ = _c(8);
361
+ let className;
362
+ let props;
363
+ if ($[0] !== t0) {
364
+ ({
365
+ className,
366
+ ...props
367
+ } = t0);
368
+ $[0] = t0;
369
+ $[1] = className;
370
+ $[2] = props;
371
+ } else {
372
+ className = $[1];
373
+ props = $[2];
374
+ }
375
+ let t1;
376
+ if ($[3] !== className) {
377
+ t1 = cn("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className);
378
+ $[3] = className;
379
+ $[4] = t1;
380
+ } else {
381
+ t1 = $[4];
382
+ }
383
+ let t2;
384
+ if ($[5] !== props || $[6] !== t1) {
385
+ t2 = /*#__PURE__*/_jsx(CommandPrimitive.Item, {
386
+ "data-slot": "command-item",
387
+ className: t1,
388
+ ...props
389
+ });
390
+ $[5] = props;
391
+ $[6] = t1;
392
+ $[7] = t2;
393
+ } else {
394
+ t2 = $[7];
395
+ }
396
+ return t2;
30
397
  }
31
- function CommandShortcut({ className, ...props }) {
32
- return (_jsx("span", { "data-slot": "command-shortcut", className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props }));
398
+ function CommandShortcut(t0) {
399
+ const $ = _c(8);
400
+ let className;
401
+ let props;
402
+ if ($[0] !== t0) {
403
+ ({
404
+ className,
405
+ ...props
406
+ } = t0);
407
+ $[0] = t0;
408
+ $[1] = className;
409
+ $[2] = props;
410
+ } else {
411
+ className = $[1];
412
+ props = $[2];
413
+ }
414
+ let t1;
415
+ if ($[3] !== className) {
416
+ t1 = cn("ml-auto text-xs tracking-widest text-muted-foreground", className);
417
+ $[3] = className;
418
+ $[4] = t1;
419
+ } else {
420
+ t1 = $[4];
421
+ }
422
+ let t2;
423
+ if ($[5] !== props || $[6] !== t1) {
424
+ t2 = /*#__PURE__*/_jsx("span", {
425
+ "data-slot": "command-shortcut",
426
+ className: t1,
427
+ ...props
428
+ });
429
+ $[5] = props;
430
+ $[6] = t1;
431
+ $[7] = t2;
432
+ } else {
433
+ t2 = $[7];
434
+ }
435
+ return t2;
33
436
  }
34
- export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, };
437
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };