@locusgraph/components 0.1.1 → 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 (116) 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 +71 -18
  5. package/dist/display/avatar.js +118 -7
  6. package/dist/display/badge.d.ts +1 -1
  7. package/dist/display/badge.js +74 -17
  8. package/dist/display/chart/chart-container.js +205 -45
  9. package/dist/display/chart/chart-legend.js +79 -14
  10. package/dist/display/chart/chart-tooltip.js +211 -40
  11. package/dist/display/chat/attachment/attachment-parts.js +222 -13
  12. package/dist/display/chat/attachment/attachment.js +210 -28
  13. package/dist/display/chat/bubble.js +225 -37
  14. package/dist/display/chat/marker.js +143 -15
  15. package/dist/display/chat/message-scroller.js +277 -15
  16. package/dist/display/chat/message.js +238 -13
  17. package/dist/display/content/item.js +448 -47
  18. package/dist/display/content/kbd.js +78 -5
  19. package/dist/display/media/aspect-ratio.js +27 -3
  20. package/dist/display/media/carousel-controls.js +163 -12
  21. package/dist/display/media/carousel.js +325 -65
  22. package/dist/display/rule-grid/rule-grid.d.ts +3 -1
  23. package/dist/display/rule-grid/rule-grid.js +311 -25
  24. package/dist/display/separator.js +56 -3
  25. package/dist/display/skeletons/layouts/skeleton-rule-grid.d.ts +8 -0
  26. package/dist/display/skeletons/layouts/skeleton-rule-grid.js +83 -0
  27. package/dist/display/skeletons/layouts/skeleton-table.d.ts +8 -0
  28. package/dist/display/skeletons/layouts/skeleton-table.js +174 -0
  29. package/dist/display/skeletons/shapes/skeleton-avatar.d.ts +10 -0
  30. package/dist/display/skeletons/shapes/skeleton-avatar.js +102 -0
  31. package/dist/display/skeletons/shapes/skeleton-button.d.ts +10 -0
  32. package/dist/display/skeletons/shapes/skeleton-button.js +102 -0
  33. package/dist/display/skeletons/shapes/skeleton-text.d.ts +7 -0
  34. package/dist/display/skeletons/shapes/skeleton-text.js +84 -0
  35. package/dist/display/skeletons/skeleton-parts.d.ts +11 -0
  36. package/dist/display/skeletons/skeleton-parts.js +68 -0
  37. package/dist/display/status/alert.d.ts +1 -1
  38. package/dist/display/status/alert.js +137 -17
  39. package/dist/display/status/empty.js +250 -22
  40. package/dist/display/status/progress.d.ts +5 -1
  41. package/dist/display/status/progress.js +120 -3
  42. package/dist/display/status/skeleton.js +40 -3
  43. package/dist/display/status/spinner.js +42 -4
  44. package/dist/display/table.js +310 -17
  45. package/dist/feedback/toaster.d.ts +1 -1
  46. package/dist/feedback/toaster.js +100 -25
  47. package/dist/form/advanced/calendar-day-button.js +89 -12
  48. package/dist/form/advanced/calendar.js +349 -56
  49. package/dist/form/advanced/combobox/combobox-chips.js +152 -9
  50. package/dist/form/advanced/combobox/combobox-items.js +240 -15
  51. package/dist/form/advanced/combobox/combobox.js +387 -14
  52. package/dist/form/advanced/input-otp.js +202 -12
  53. package/dist/form/choice/checkbox.js +59 -4
  54. package/dist/form/choice/radio-group.js +95 -6
  55. package/dist/form/choice/select.js +479 -25
  56. package/dist/form/choice/slider.js +118 -4
  57. package/dist/form/choice/switch.js +53 -3
  58. package/dist/form/field/field-error.js +117 -14
  59. package/dist/form/field/field-separator.js +70 -3
  60. package/dist/form/field/field-set.js +85 -5
  61. package/dist/form/field/field-text.js +116 -7
  62. package/dist/form/field/field.js +138 -26
  63. package/dist/form/hook-form/form.js +338 -40
  64. package/dist/form/input-group.js +297 -47
  65. package/dist/form/input.js +47 -3
  66. package/dist/form/label.js +42 -3
  67. package/dist/form/native-select.js +148 -8
  68. package/dist/form/textarea.js +41 -3
  69. package/dist/index.d.ts +6 -0
  70. package/dist/index.js +6 -0
  71. package/dist/layout/accordion.js +166 -9
  72. package/dist/layout/collapsible.js +75 -7
  73. package/dist/layout/resizable.js +123 -8
  74. package/dist/layout/scroll/direction.js +25 -3
  75. package/dist/layout/scroll/scroll-area.d.ts +1 -1
  76. package/dist/layout/scroll/scroll-area.js +138 -5
  77. package/dist/layout/sidebar/sidebar-context.js +184 -51
  78. package/dist/layout/sidebar/sidebar-menu-sub.js +219 -14
  79. package/dist/layout/sidebar/sidebar-menu.js +319 -38
  80. package/dist/layout/sidebar/sidebar-sections.js +369 -22
  81. package/dist/layout/sidebar/sidebar.js +385 -29
  82. package/dist/layout/tabs.js +183 -18
  83. package/dist/layout/use-mobile.js +23 -10
  84. package/dist/navigation/breadcrumb.js +302 -18
  85. package/dist/navigation/menubar/menubar-items.js +323 -17
  86. package/dist/navigation/menubar/menubar-sub.js +126 -8
  87. package/dist/navigation/menubar/menubar.js +213 -13
  88. package/dist/navigation/navigation-menu.js +367 -19
  89. package/dist/navigation/pagination.js +329 -20
  90. package/dist/overlay/alert-dialog.js +485 -26
  91. package/dist/overlay/context-menu/context-menu-items.js +323 -17
  92. package/dist/overlay/context-menu/context-menu-sub.js +126 -8
  93. package/dist/overlay/context-menu/context-menu.js +140 -11
  94. package/dist/overlay/dialog.js +406 -25
  95. package/dist/overlay/floating/command.js +424 -21
  96. package/dist/overlay/floating/drawer.js +354 -22
  97. package/dist/overlay/floating/hover-card.js +107 -7
  98. package/dist/overlay/menu/dropdown-menu-choice.js +150 -8
  99. package/dist/overlay/menu/dropdown-menu-item.js +174 -9
  100. package/dist/overlay/menu/dropdown-menu-sub.js +125 -8
  101. package/dist/overlay/menu/dropdown-menu.js +147 -12
  102. package/dist/overlay/popover.js +106 -7
  103. package/dist/overlay/sheet.js +380 -27
  104. package/dist/overlay/tooltip.js +145 -9
  105. package/dist/shell/app-header.js +81 -5
  106. package/dist/shell/app-shell.js +58 -3
  107. package/dist/shell/breadcrumbs.js +102 -12
  108. package/dist/shell/docs/docs-header.js +211 -11
  109. package/dist/shell/docs/docs-shell.js +100 -3
  110. package/dist/shell/docs/docs-sidebar.js +88 -7
  111. package/dist/shell/docs/on-this-page.js +78 -7
  112. package/dist/shell/docs/use-active-section.js +88 -42
  113. package/dist/shell/navigation/app-sidebar.js +188 -6
  114. package/dist/shell/navigation/nav-group.js +161 -10
  115. package/dist/shell/theme-toggle.js +52 -5
  116. package/package.json +5 -5
@@ -1,53 +1,334 @@
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 { cva } from "class-variance-authority";
4
5
  import { cn } from "cn";
5
6
  import * as Slot from "radix-ui/slot";
6
7
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../overlay/tooltip.js";
7
8
  import { sidebarMobileHitArea, useSidebar } from "./sidebar-context.js";
8
- function SidebarMenu({ className, ...props }) {
9
- return (_jsx("ul", { "data-slot": "sidebar-menu", "data-sidebar": "menu", className: cn("flex w-full min-w-0 flex-col gap-1", className), ...props }));
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ function SidebarMenu(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 w-full min-w-0 flex-col gap-1", 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("ul", {
37
+ "data-slot": "sidebar-menu",
38
+ "data-sidebar": "menu",
39
+ className: t1,
40
+ ...props
41
+ });
42
+ $[5] = props;
43
+ $[6] = t1;
44
+ $[7] = t2;
45
+ } else {
46
+ t2 = $[7];
47
+ }
48
+ return t2;
10
49
  }
11
- function SidebarMenuItem({ className, ...props }) {
12
- return (_jsx("li", { "data-slot": "sidebar-menu-item", "data-sidebar": "menu-item", className: cn("group/menu-item relative", className), ...props }));
50
+ function SidebarMenuItem(t0) {
51
+ const $ = _c(8);
52
+ let className;
53
+ let props;
54
+ if ($[0] !== t0) {
55
+ ({
56
+ className,
57
+ ...props
58
+ } = t0);
59
+ $[0] = t0;
60
+ $[1] = className;
61
+ $[2] = props;
62
+ } else {
63
+ className = $[1];
64
+ props = $[2];
65
+ }
66
+ let t1;
67
+ if ($[3] !== className) {
68
+ t1 = cn("group/menu-item relative", className);
69
+ $[3] = className;
70
+ $[4] = t1;
71
+ } else {
72
+ t1 = $[4];
73
+ }
74
+ let t2;
75
+ if ($[5] !== props || $[6] !== t1) {
76
+ t2 = /*#__PURE__*/_jsx("li", {
77
+ "data-slot": "sidebar-menu-item",
78
+ "data-sidebar": "menu-item",
79
+ className: t1,
80
+ ...props
81
+ });
82
+ $[5] = props;
83
+ $[6] = t1;
84
+ $[7] = t2;
85
+ } else {
86
+ t2 = $[7];
87
+ }
88
+ return t2;
13
89
  }
14
90
  const sidebarMenuButtonVariants = cva("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0", {
15
- variants: {
16
- variant: {
17
- default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
18
- outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]",
19
- },
20
- size: {
21
- default: "h-8 text-sm",
22
- sm: "h-7 text-xs",
23
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
24
- },
25
- },
26
- defaultVariants: {
27
- variant: "default",
28
- size: "default",
91
+ variants: {
92
+ variant: {
93
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
94
+ outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
29
95
  },
30
- });
31
- function SidebarMenuButton({ asChild = false, isActive = false, variant = "default", size = "default", tooltip, className, ...props }) {
32
- const Comp = asChild ? Slot.Root : "button";
33
- const { isMobile, state } = useSidebar();
34
- const button = (_jsx(Comp, { "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className), ...props }));
35
- if (!tooltip) {
36
- return button;
96
+ size: {
97
+ default: "h-8 text-sm",
98
+ sm: "h-7 text-xs",
99
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
37
100
  }
38
- if (typeof tooltip === "string") {
39
- tooltip = {
40
- children: tooltip,
41
- };
101
+ },
102
+ defaultVariants: {
103
+ variant: "default",
104
+ size: "default"
105
+ }
106
+ });
107
+ function SidebarMenuButton(t0) {
108
+ const $ = _c(28);
109
+ let className;
110
+ let props;
111
+ let t1;
112
+ let t2;
113
+ let t3;
114
+ let t4;
115
+ let tooltip;
116
+ if ($[0] !== t0) {
117
+ ({
118
+ asChild: t1,
119
+ isActive: t2,
120
+ variant: t3,
121
+ size: t4,
122
+ tooltip,
123
+ className,
124
+ ...props
125
+ } = t0);
126
+ $[0] = t0;
127
+ $[1] = className;
128
+ $[2] = props;
129
+ $[3] = t1;
130
+ $[4] = t2;
131
+ $[5] = t3;
132
+ $[6] = t4;
133
+ $[7] = tooltip;
134
+ } else {
135
+ className = $[1];
136
+ props = $[2];
137
+ t1 = $[3];
138
+ t2 = $[4];
139
+ t3 = $[5];
140
+ t4 = $[6];
141
+ tooltip = $[7];
142
+ }
143
+ const asChild = t1 === undefined ? false : t1;
144
+ const isActive = t2 === undefined ? false : t2;
145
+ const variant = t3 === undefined ? "default" : t3;
146
+ const size = t4 === undefined ? "default" : t4;
147
+ const Comp = asChild ? Slot.Root : "button";
148
+ const {
149
+ isMobile,
150
+ state
151
+ } = useSidebar();
152
+ let t5;
153
+ if ($[8] !== className || $[9] !== size || $[10] !== variant) {
154
+ t5 = cn(sidebarMenuButtonVariants({
155
+ variant,
156
+ size
157
+ }), className);
158
+ $[8] = className;
159
+ $[9] = size;
160
+ $[10] = variant;
161
+ $[11] = t5;
162
+ } else {
163
+ t5 = $[11];
164
+ }
165
+ let t6;
166
+ if ($[12] !== Comp || $[13] !== isActive || $[14] !== props || $[15] !== size || $[16] !== t5) {
167
+ t6 = /*#__PURE__*/_jsx(Comp, {
168
+ "data-slot": "sidebar-menu-button",
169
+ "data-sidebar": "menu-button",
170
+ "data-size": size,
171
+ "data-active": isActive,
172
+ className: t5,
173
+ ...props
174
+ });
175
+ $[12] = Comp;
176
+ $[13] = isActive;
177
+ $[14] = props;
178
+ $[15] = size;
179
+ $[16] = t5;
180
+ $[17] = t6;
181
+ } else {
182
+ t6 = $[17];
183
+ }
184
+ const button = t6;
185
+ if (!tooltip) {
186
+ return button;
187
+ }
188
+ if (typeof tooltip === "string") {
189
+ let t7;
190
+ if ($[18] !== tooltip) {
191
+ t7 = {
192
+ children: tooltip
193
+ };
194
+ $[18] = tooltip;
195
+ $[19] = t7;
196
+ } else {
197
+ t7 = $[19];
42
198
  }
43
- return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: button }), _jsx(TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip })] }));
199
+ tooltip = t7;
200
+ }
201
+ let t7;
202
+ if ($[20] !== button) {
203
+ t7 = /*#__PURE__*/_jsx(TooltipTrigger, {
204
+ asChild: true,
205
+ children: button
206
+ });
207
+ $[20] = button;
208
+ $[21] = t7;
209
+ } else {
210
+ t7 = $[21];
211
+ }
212
+ const t8 = state !== "collapsed" || isMobile;
213
+ let t9;
214
+ if ($[22] !== t8 || $[23] !== tooltip) {
215
+ t9 = /*#__PURE__*/_jsx(TooltipContent, {
216
+ side: "right",
217
+ align: "center",
218
+ hidden: t8,
219
+ ...tooltip
220
+ });
221
+ $[22] = t8;
222
+ $[23] = tooltip;
223
+ $[24] = t9;
224
+ } else {
225
+ t9 = $[24];
226
+ }
227
+ let t10;
228
+ if ($[25] !== t7 || $[26] !== t9) {
229
+ t10 = /*#__PURE__*/_jsxs(Tooltip, {
230
+ children: [t7, t9]
231
+ });
232
+ $[25] = t7;
233
+ $[26] = t9;
234
+ $[27] = t10;
235
+ } else {
236
+ t10 = $[27];
237
+ }
238
+ return t10;
44
239
  }
45
- function SidebarMenuAction({ className, asChild = false, showOnHover = false, ...props }) {
46
- const Comp = asChild ? Slot.Root : "button";
47
- return (_jsx(Comp, { "data-slot": "sidebar-menu-action", "data-sidebar": "menu-action", className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", sidebarMobileHitArea, "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", showOnHover &&
48
- "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0", className), ...props }));
240
+ function SidebarMenuAction(t0) {
241
+ const $ = _c(12);
242
+ let className;
243
+ let props;
244
+ let t1;
245
+ let t2;
246
+ if ($[0] !== t0) {
247
+ ({
248
+ className,
249
+ asChild: t1,
250
+ showOnHover: t2,
251
+ ...props
252
+ } = t0);
253
+ $[0] = t0;
254
+ $[1] = className;
255
+ $[2] = props;
256
+ $[3] = t1;
257
+ $[4] = t2;
258
+ } else {
259
+ className = $[1];
260
+ props = $[2];
261
+ t1 = $[3];
262
+ t2 = $[4];
263
+ }
264
+ const asChild = t1 === undefined ? false : t1;
265
+ const showOnHover = t2 === undefined ? false : t2;
266
+ const Comp = asChild ? Slot.Root : "button";
267
+ const t3 = showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0";
268
+ let t4;
269
+ if ($[5] !== className || $[6] !== t3) {
270
+ t4 = cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", sidebarMobileHitArea, "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", t3, className);
271
+ $[5] = className;
272
+ $[6] = t3;
273
+ $[7] = t4;
274
+ } else {
275
+ t4 = $[7];
276
+ }
277
+ let t5;
278
+ if ($[8] !== Comp || $[9] !== props || $[10] !== t4) {
279
+ t5 = /*#__PURE__*/_jsx(Comp, {
280
+ "data-slot": "sidebar-menu-action",
281
+ "data-sidebar": "menu-action",
282
+ className: t4,
283
+ ...props
284
+ });
285
+ $[8] = Comp;
286
+ $[9] = props;
287
+ $[10] = t4;
288
+ $[11] = t5;
289
+ } else {
290
+ t5 = $[11];
291
+ }
292
+ return t5;
49
293
  }
50
- function SidebarMenuBadge({ className, ...props }) {
51
- return (_jsx("div", { "data-slot": "sidebar-menu-badge", "data-sidebar": "menu-badge", className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none", "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", className), ...props }));
294
+ function SidebarMenuBadge(t0) {
295
+ const $ = _c(8);
296
+ let className;
297
+ let props;
298
+ if ($[0] !== t0) {
299
+ ({
300
+ className,
301
+ ...props
302
+ } = t0);
303
+ $[0] = t0;
304
+ $[1] = className;
305
+ $[2] = props;
306
+ } else {
307
+ className = $[1];
308
+ props = $[2];
309
+ }
310
+ let t1;
311
+ if ($[3] !== className) {
312
+ t1 = cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none", "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", className);
313
+ $[3] = className;
314
+ $[4] = t1;
315
+ } else {
316
+ t1 = $[4];
317
+ }
318
+ let t2;
319
+ if ($[5] !== props || $[6] !== t1) {
320
+ t2 = /*#__PURE__*/_jsx("div", {
321
+ "data-slot": "sidebar-menu-badge",
322
+ "data-sidebar": "menu-badge",
323
+ className: t1,
324
+ ...props
325
+ });
326
+ $[5] = props;
327
+ $[6] = t1;
328
+ $[7] = t2;
329
+ } else {
330
+ t2 = $[7];
331
+ }
332
+ return t2;
52
333
  }
53
- export { SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, sidebarMenuButtonVariants, };
334
+ export { SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, sidebarMenuButtonVariants };