raft-ui 0.0.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 (134) hide show
  1. package/README.md +24 -0
  2. package/dist/cn.d.mts +2 -0
  3. package/dist/cn.mjs +2 -0
  4. package/dist/index.d.mts +2710 -0
  5. package/dist/index.mjs +4821 -0
  6. package/dist/label-DWq4ia5I.mjs +115 -0
  7. package/dist/styled-props-B3SNekJg.d.mts +16 -0
  8. package/dist/wip.d.mts +1238 -0
  9. package/dist/wip.mjs +1416 -0
  10. package/package.json +70 -0
  11. package/src/components/avatar/avatar.tsx +375 -0
  12. package/src/components/avatar/index.ts +17 -0
  13. package/src/components/badge/badge.tsx +393 -0
  14. package/src/components/badge/index.ts +2 -0
  15. package/src/components/banner/banner.tsx +269 -0
  16. package/src/components/banner/index.ts +8 -0
  17. package/src/components/bottom-sheet/bottom-sheet.tsx +152 -0
  18. package/src/components/bottom-sheet/index.ts +22 -0
  19. package/src/components/button/button.tsx +497 -0
  20. package/src/components/button/index.ts +2 -0
  21. package/src/components/checkbox/checkbox-indicator.tsx +128 -0
  22. package/src/components/checkbox/checkbox.tsx +350 -0
  23. package/src/components/checkbox/index.ts +2 -0
  24. package/src/components/combobox/combobox.tsx +603 -0
  25. package/src/components/combobox/index.ts +52 -0
  26. package/src/components/context-menu/context-menu.tsx +380 -0
  27. package/src/components/context-menu/index.ts +34 -0
  28. package/src/components/conversation-preview-card/conversation-preview-card.tsx +336 -0
  29. package/src/components/conversation-preview-card/index.ts +32 -0
  30. package/src/components/description-list/description-list.tsx +116 -0
  31. package/src/components/description-list/index.ts +14 -0
  32. package/src/components/dropdown-menu/dropdown-menu.tsx +405 -0
  33. package/src/components/dropdown-menu/index.ts +38 -0
  34. package/src/components/empty-state/empty-state.tsx +177 -0
  35. package/src/components/empty-state/index.ts +16 -0
  36. package/src/components/field/field.tsx +125 -0
  37. package/src/components/field/index.ts +18 -0
  38. package/src/components/inline-code/index.ts +2 -0
  39. package/src/components/inline-code/inline-code.tsx +33 -0
  40. package/src/components/input/index.ts +2 -0
  41. package/src/components/input/input.tsx +76 -0
  42. package/src/components/input-group/index.ts +7 -0
  43. package/src/components/input-group/input-group.tsx +215 -0
  44. package/src/components/kbd/index.ts +2 -0
  45. package/src/components/kbd/kbd.tsx +43 -0
  46. package/src/components/label/index.ts +7 -0
  47. package/src/components/label/label.tsx +99 -0
  48. package/src/components/lightbox/index.ts +24 -0
  49. package/src/components/lightbox/lightbox.tsx +245 -0
  50. package/src/components/list-item/index.ts +20 -0
  51. package/src/components/list-item/list-item.tsx +263 -0
  52. package/src/components/media-list-item/index.ts +20 -0
  53. package/src/components/media-list-item/media-list-item.tsx +169 -0
  54. package/src/components/notification-center/index.ts +39 -0
  55. package/src/components/notification-center/notification-center.tsx +558 -0
  56. package/src/components/panel-header/index.ts +22 -0
  57. package/src/components/panel-header/panel-header.tsx +199 -0
  58. package/src/components/popover/index.ts +30 -0
  59. package/src/components/popover/popover.tsx +248 -0
  60. package/src/components/preview-shell/index.ts +2 -0
  61. package/src/components/preview-shell/preview-shell.tsx +51 -0
  62. package/src/components/quoted-message-card/index.ts +36 -0
  63. package/src/components/quoted-message-card/quoted-message-card.tsx +391 -0
  64. package/src/components/radio-group/index.ts +6 -0
  65. package/src/components/radio-group/radio-group.tsx +119 -0
  66. package/src/components/section-header/index.ts +16 -0
  67. package/src/components/section-header/section-header.tsx +117 -0
  68. package/src/components/section-label/index.ts +2 -0
  69. package/src/components/section-label/section-label.tsx +38 -0
  70. package/src/components/segmented-control/index.ts +12 -0
  71. package/src/components/segmented-control/segmented-control.tsx +129 -0
  72. package/src/components/select/index.ts +40 -0
  73. package/src/components/select/select.tsx +382 -0
  74. package/src/components/spinner/index.ts +2 -0
  75. package/src/components/spinner/spinner.tsx +228 -0
  76. package/src/components/status/index.ts +2 -0
  77. package/src/components/status/status.tsx +152 -0
  78. package/src/components/tabs/index.ts +24 -0
  79. package/src/components/tabs/tabs.tsx +417 -0
  80. package/src/components/text/index.ts +2 -0
  81. package/src/components/text/text.tsx +130 -0
  82. package/src/components/textarea/index.ts +2 -0
  83. package/src/components/textarea/textarea.tsx +136 -0
  84. package/src/components/toggle-group/index.ts +12 -0
  85. package/src/components/toggle-group/toggle-group.tsx +111 -0
  86. package/src/components/tooltip/index.ts +14 -0
  87. package/src/components/tooltip/tooltip.tsx +186 -0
  88. package/src/fonts/brutal.css +2 -0
  89. package/src/index.ts +404 -0
  90. package/src/legacy/AttentionDot.tsx +28 -0
  91. package/src/legacy/AvatarListRow.tsx +87 -0
  92. package/src/legacy/AvatarSlot.tsx +157 -0
  93. package/src/legacy/Badge.tsx +95 -0
  94. package/src/legacy/Banner.tsx +74 -0
  95. package/src/legacy/BottomSheet.tsx +76 -0
  96. package/src/legacy/CheckMarker.tsx +72 -0
  97. package/src/legacy/Checkbox.tsx +81 -0
  98. package/src/legacy/ConversationPreviewCard.tsx +169 -0
  99. package/src/legacy/DismissBackdrop.tsx +68 -0
  100. package/src/legacy/EmptyState.tsx +63 -0
  101. package/src/legacy/ExperimentalBadge.tsx +19 -0
  102. package/src/legacy/FormField.tsx +106 -0
  103. package/src/legacy/KeyValueRow.tsx +67 -0
  104. package/src/legacy/Lightbox.tsx +119 -0
  105. package/src/legacy/NotificationCenter.tsx +217 -0
  106. package/src/legacy/PanelHeader.tsx +94 -0
  107. package/src/legacy/PreviewShell.tsx +40 -0
  108. package/src/legacy/QuotedMessageCard.tsx +181 -0
  109. package/src/legacy/ReorderablePanelTabs.tsx +151 -0
  110. package/src/legacy/SandboxedPreviewFrame.tsx +59 -0
  111. package/src/legacy/SearchInput.tsx +23 -0
  112. package/src/legacy/SectionEyebrow.tsx +60 -0
  113. package/src/legacy/SectionHeader.tsx +68 -0
  114. package/src/legacy/SegmentedControl.tsx +74 -0
  115. package/src/legacy/SlugInput.tsx +29 -0
  116. package/src/legacy/Spinner.tsx +89 -0
  117. package/src/legacy/StatusDot.tsx +51 -0
  118. package/src/legacy/SurfaceListItem.tsx +32 -0
  119. package/src/legacy/Textarea.tsx +137 -0
  120. package/src/legacy/button.tsx +100 -0
  121. package/src/legacy/context-menu-divider.tsx +12 -0
  122. package/src/legacy/menu-item.tsx +66 -0
  123. package/src/legacy/selection-popover.tsx +212 -0
  124. package/src/legacy/server-switcher-menu.tsx +203 -0
  125. package/src/legacy/source.css +240 -0
  126. package/src/lib/cn.ts +1 -0
  127. package/src/lib/styled-props.ts +11 -0
  128. package/src/lib/theme/theme-context.ts +28 -0
  129. package/src/lib/theme/theme-provider.tsx +181 -0
  130. package/src/lib/theme/use-theme.ts +12 -0
  131. package/src/lib/tv.ts +29 -0
  132. package/src/lib/without-children.ts +6 -0
  133. package/src/styles.css +467 -0
  134. package/src/wip.ts +255 -0
@@ -0,0 +1,380 @@
1
+ import { ContextMenu as BaseContextMenu } from "@base-ui/react";
2
+ import type { ComponentPropsWithRef } from "react";
3
+ import { tv } from "../../lib/tv.ts";
4
+ import { Kbd, type KbdProps } from "../kbd/index.ts";
5
+ import type { StyledProps } from "../../lib/styled-props.ts";
6
+ import { useThemeFamily } from "../../lib/theme/use-theme.ts";
7
+
8
+ const contextMenu = tv({
9
+ slots: {
10
+ trigger: ["select-none"],
11
+ positioner: ["isolate z-50 outline-none"],
12
+ content: [
13
+ "max-h-[var(--available-height)] min-w-48 overflow-hidden bg-layer-panel",
14
+ "outline-none",
15
+ ],
16
+ item: [
17
+ "flex w-full cursor-default select-none items-center gap-2 px-3 py-2 [@media(max-height:600px)]:py-1",
18
+ "text-left text-sm outline-none transition-colors",
19
+ ],
20
+ radioItem: [
21
+ "flex w-full cursor-default select-none items-center gap-2 px-3",
22
+ "text-left outline-none transition-colors",
23
+ ],
24
+ submenuTrigger: [
25
+ "flex w-full cursor-default select-none items-center gap-2 px-3 py-2 [@media(max-height:600px)]:py-1",
26
+ "text-left text-sm outline-none transition-colors",
27
+ ],
28
+ label: [],
29
+ shortcut: ["ml-auto"],
30
+ separator: ["border-t-2"],
31
+ indicator: ["pointer-events-none ml-auto flex size-3 shrink-0 items-center justify-center"],
32
+ },
33
+ variants: {
34
+ theme: {
35
+ brutal: {
36
+ content: ["border-2 border-black bg-white shadow-lg"],
37
+ item: [
38
+ "py-1.5 font-sans text-sm font-semibold leading-6 text-black hover:bg-brutal-yellow/30 data-[highlighted]:bg-brutal-yellow/30",
39
+ "data-[disabled]:pointer-events-none data-[disabled]:text-black/30",
40
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-2 [&_svg_*]:stroke-2 [&_svg:not([class*='size-'])]:size-3.5",
41
+ ],
42
+ radioItem: [
43
+ "h-9 overflow-hidden font-sans text-sm font-semibold leading-6 text-black",
44
+ "border-b border-black/10 last:border-b-0",
45
+ "hover:bg-brutal-yellow/30 data-[highlighted]:bg-brutal-yellow/30",
46
+ "data-[disabled]:pointer-events-none data-[disabled]:text-black/30",
47
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-2 [&_svg_*]:stroke-2 [&_svg:not([class*='size-'])]:size-3.5",
48
+ ],
49
+ submenuTrigger: [
50
+ "py-1.5 font-sans text-sm font-semibold leading-6 text-black hover:bg-brutal-yellow/30 data-[highlighted]:bg-brutal-yellow/30 data-[popup-open]:bg-brutal-yellow/30",
51
+ "data-[disabled]:pointer-events-none data-[disabled]:text-black/30",
52
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-2 [&_svg_*]:stroke-2 [&_svg:not([class*='size-'])]:size-3.5",
53
+ ],
54
+ label: [
55
+ "border-b border-black px-3 py-2",
56
+ "font-sans text-[10px] font-bold uppercase leading-none tracking-wide text-black/60",
57
+ ],
58
+ shortcut: ["font-sans text-sm font-semibold leading-6"],
59
+ separator: ["border-black"],
60
+ indicator: [],
61
+ },
62
+ elegant: {
63
+ content: [
64
+ "gap-0.5 rounded-md bg-layer-popover p-1",
65
+ "shadow-lg outline-none",
66
+ "flex flex-col",
67
+ ],
68
+ item: [
69
+ "gap-2.5 rounded-sm px-3 py-2 text-[13px] font-medium tracking-[-0.005em]",
70
+ "text-foreground-muted",
71
+ "transition-[background-color,color] duration-150",
72
+ "hover:bg-foreground/[0.04] hover:text-foreground-strong",
73
+ "data-[highlighted]:bg-foreground/[0.04] data-[highlighted]:text-foreground-strong",
74
+ "data-[disabled]:pointer-events-none data-[disabled]:text-foreground-disabled",
75
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-[1.5] [&_svg_*]:stroke-[1.5] [&>svg]:size-4",
76
+ "[&>svg:last-child]:size-3",
77
+ "[&>svg]:text-foreground-muted",
78
+ "hover:[&>svg]:text-foreground-strong",
79
+ "data-[highlighted]:[&>svg]:text-foreground-strong",
80
+ ],
81
+ radioItem: [
82
+ "gap-2.5 rounded-sm px-3 py-2 text-[13px] font-medium tracking-[-0.005em]",
83
+ "text-foreground-muted",
84
+ "transition-[background-color,color] duration-150",
85
+ "hover:bg-foreground/[0.04] hover:text-foreground-strong",
86
+ "data-[highlighted]:bg-foreground/[0.04] data-[highlighted]:text-foreground-strong",
87
+ "data-[disabled]:pointer-events-none data-[disabled]:text-foreground-disabled",
88
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-[1.5] [&_svg_*]:stroke-[1.5] [&>svg]:size-4",
89
+ "[&>svg:last-child]:size-3",
90
+ "[&>svg]:text-foreground-muted",
91
+ "hover:[&>svg]:text-foreground-strong",
92
+ "data-[highlighted]:[&>svg]:text-foreground-strong",
93
+ ],
94
+ submenuTrigger: [
95
+ "gap-2.5 rounded-sm px-3 py-2 text-[13px] font-medium tracking-[-0.005em]",
96
+ "text-foreground-muted",
97
+ "transition-[background-color,color] duration-150",
98
+ "hover:bg-foreground/[0.04] hover:text-foreground-strong",
99
+ "data-[highlighted]:bg-foreground/[0.04] data-[highlighted]:text-foreground-strong",
100
+ "data-[popup-open]:bg-foreground/[0.04] data-[popup-open]:text-foreground-strong",
101
+ "data-[disabled]:pointer-events-none data-[disabled]:text-foreground-disabled",
102
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:stroke-[1.5] [&_svg_*]:stroke-[1.5] [&>svg]:size-4",
103
+ "[&>svg:last-child]:size-3",
104
+ "[&>svg]:text-foreground-muted",
105
+ "hover:[&>svg]:text-foreground-strong",
106
+ "data-[highlighted]:[&>svg]:text-foreground-strong",
107
+ "data-[popup-open]:[&>svg]:text-foreground-strong",
108
+ ],
109
+ label: [
110
+ "-mx-1 border-b border-line-muted px-3 py-2",
111
+ "text-[11px] font-medium leading-none tracking-[-0.005em] text-foreground/45",
112
+ ],
113
+ shortcut: ["text-foreground-muted"],
114
+ separator: ["my-1 -mx-1 h-px border-0 bg-line-muted"],
115
+ indicator: [],
116
+ },
117
+ },
118
+ },
119
+ });
120
+
121
+ export type ContextMenuProps = BaseContextMenu.Root.Props;
122
+
123
+ export function ContextMenu(props: ContextMenuProps) {
124
+ return <BaseContextMenu.Root data-slot="context-menu" {...props} />;
125
+ }
126
+
127
+ export type ContextMenuSubmenuProps = BaseContextMenu.SubmenuRoot.Props;
128
+
129
+ export function ContextMenuSubmenu(props: ContextMenuSubmenuProps) {
130
+ return <BaseContextMenu.SubmenuRoot data-slot="context-menu-submenu" {...props} />;
131
+ }
132
+
133
+ export type ContextMenuTriggerProps = StyledProps<BaseContextMenu.Trigger.Props>;
134
+
135
+ export function ContextMenuTrigger({ className, ...props }: ContextMenuTriggerProps) {
136
+ const theme = useThemeFamily();
137
+ const { trigger } = contextMenu({ theme });
138
+ return (
139
+ <BaseContextMenu.Trigger
140
+ data-slot="context-menu-trigger"
141
+ className={trigger({ className })}
142
+ {...props}
143
+ />
144
+ );
145
+ }
146
+
147
+ export type ContextMenuPortalProps = BaseContextMenu.Portal.Props;
148
+
149
+ export function ContextMenuPortal(props: ContextMenuPortalProps) {
150
+ return <BaseContextMenu.Portal data-slot="context-menu-portal" {...props} />;
151
+ }
152
+
153
+ export type ContextMenuContentProps = StyledProps<BaseContextMenu.Popup.Props> &
154
+ Partial<
155
+ Pick<
156
+ BaseContextMenu.Positioner.Props,
157
+ | "align"
158
+ | "alignOffset"
159
+ | "anchor"
160
+ | "arrowPadding"
161
+ | "collisionAvoidance"
162
+ | "collisionBoundary"
163
+ | "collisionPadding"
164
+ | "disableAnchorTracking"
165
+ | "positionMethod"
166
+ | "side"
167
+ | "sideOffset"
168
+ | "sticky"
169
+ >
170
+ > & {
171
+ portalProps?: ContextMenuPortalProps;
172
+ };
173
+
174
+ export function ContextMenuContent({
175
+ align = "start",
176
+ alignOffset = 0,
177
+ anchor,
178
+ arrowPadding,
179
+ collisionAvoidance = {
180
+ side: "none",
181
+ align: "none",
182
+ fallbackAxisSide: "none",
183
+ },
184
+ collisionBoundary,
185
+ collisionPadding,
186
+ disableAnchorTracking = true,
187
+ positionMethod = "fixed",
188
+ side = "right",
189
+ sideOffset = 0,
190
+ sticky,
191
+ portalProps,
192
+ className,
193
+ ...props
194
+ }: ContextMenuContentProps) {
195
+ const theme = useThemeFamily();
196
+ const { positioner, content } = contextMenu({ theme });
197
+ return (
198
+ <BaseContextMenu.Portal {...portalProps}>
199
+ <BaseContextMenu.Positioner
200
+ align={align}
201
+ alignOffset={alignOffset}
202
+ anchor={anchor}
203
+ arrowPadding={arrowPadding}
204
+ collisionAvoidance={collisionAvoidance}
205
+ collisionBoundary={collisionBoundary}
206
+ collisionPadding={collisionPadding}
207
+ disableAnchorTracking={disableAnchorTracking}
208
+ positionMethod={positionMethod}
209
+ side={side}
210
+ sideOffset={sideOffset}
211
+ sticky={sticky}
212
+ className={positioner()}
213
+ >
214
+ <BaseContextMenu.Popup
215
+ data-slot="context-menu-content"
216
+ className={content({ className })}
217
+ {...props}
218
+ />
219
+ </BaseContextMenu.Positioner>
220
+ </BaseContextMenu.Portal>
221
+ );
222
+ }
223
+
224
+ export type ContextMenuItemProps = StyledProps<BaseContextMenu.Item.Props>;
225
+
226
+ export function ContextMenuItem({ className, ...props }: ContextMenuItemProps) {
227
+ const theme = useThemeFamily();
228
+ const { item } = contextMenu({ theme });
229
+ return (
230
+ <BaseContextMenu.Item
231
+ data-slot="context-menu-item"
232
+ className={item({ className })}
233
+ {...props}
234
+ />
235
+ );
236
+ }
237
+
238
+ export type ContextMenuSubmenuTriggerProps = StyledProps<BaseContextMenu.SubmenuTrigger.Props>;
239
+
240
+ export function ContextMenuSubmenuTrigger({ className, ...props }: ContextMenuSubmenuTriggerProps) {
241
+ const theme = useThemeFamily();
242
+ const { submenuTrigger } = contextMenu({ theme });
243
+ return (
244
+ <BaseContextMenu.SubmenuTrigger
245
+ data-slot="context-menu-submenu-trigger"
246
+ className={submenuTrigger({ className })}
247
+ {...props}
248
+ />
249
+ );
250
+ }
251
+
252
+ export type ContextMenuLabelProps = StyledProps<ComponentPropsWithRef<"div">>;
253
+
254
+ export function ContextMenuLabel({ className, ...props }: ContextMenuLabelProps) {
255
+ const theme = useThemeFamily();
256
+ const { label } = contextMenu({ theme });
257
+ return <div data-slot="context-menu-label" className={label({ className })} {...props} />;
258
+ }
259
+
260
+ export type ContextMenuShortcutProps = KbdProps;
261
+
262
+ export function ContextMenuShortcut({ className, ...props }: ContextMenuShortcutProps) {
263
+ const theme = useThemeFamily();
264
+ const { shortcut } = contextMenu({ theme });
265
+ return <Kbd data-slot="context-menu-shortcut" className={shortcut({ className })} {...props} />;
266
+ }
267
+
268
+ export type ContextMenuSeparatorProps = StyledProps<BaseContextMenu.Separator.Props>;
269
+
270
+ export function ContextMenuSeparator({ className, ...props }: ContextMenuSeparatorProps) {
271
+ const theme = useThemeFamily();
272
+ const { separator } = contextMenu({ theme });
273
+ return (
274
+ <BaseContextMenu.Separator
275
+ data-slot="context-menu-separator"
276
+ className={separator({ className })}
277
+ {...props}
278
+ />
279
+ );
280
+ }
281
+
282
+ function ContextMenuCheckIcon() {
283
+ return (
284
+ <svg width="12" height="12" viewBox="0 0 12 12" aria-hidden className="size-3 shrink-0">
285
+ <g
286
+ fill="none"
287
+ strokeLinecap="round"
288
+ strokeLinejoin="round"
289
+ strokeWidth="1"
290
+ stroke="currentColor"
291
+ >
292
+ <path d="M1.75391 6.41392L4.4001 9.24985L10.2467 2.98532" />
293
+ </g>
294
+ </svg>
295
+ );
296
+ }
297
+
298
+ export type ContextMenuRadioGroupProps = StyledProps<BaseContextMenu.RadioGroup.Props>;
299
+
300
+ export function ContextMenuRadioGroup({ ...props }: ContextMenuRadioGroupProps) {
301
+ return <BaseContextMenu.RadioGroup data-slot="context-menu-radio-group" {...props} />;
302
+ }
303
+
304
+ export type ContextMenuRadioItemProps = StyledProps<BaseContextMenu.RadioItem.Props>;
305
+
306
+ export function ContextMenuRadioItem({ className, children, ...props }: ContextMenuRadioItemProps) {
307
+ const theme = useThemeFamily();
308
+ const { radioItem, indicator } = contextMenu({ theme });
309
+ return (
310
+ <BaseContextMenu.RadioItem
311
+ data-slot="context-menu-radio-item"
312
+ className={radioItem({ className })}
313
+ {...props}
314
+ >
315
+ {children}
316
+ <span className={indicator()}>
317
+ <BaseContextMenu.RadioItemIndicator>
318
+ <ContextMenuCheckIcon />
319
+ </BaseContextMenu.RadioItemIndicator>
320
+ </span>
321
+ </BaseContextMenu.RadioItem>
322
+ );
323
+ }
324
+
325
+ export type ContextMenuRadioItemIndicatorProps =
326
+ StyledProps<BaseContextMenu.RadioItemIndicator.Props>;
327
+
328
+ export function ContextMenuRadioItemIndicator({
329
+ className,
330
+ ...props
331
+ }: ContextMenuRadioItemIndicatorProps) {
332
+ return (
333
+ <BaseContextMenu.RadioItemIndicator
334
+ data-slot="context-menu-radio-item-indicator"
335
+ className={className}
336
+ {...props}
337
+ />
338
+ );
339
+ }
340
+
341
+ export type ContextMenuCheckboxItemProps = StyledProps<BaseContextMenu.CheckboxItem.Props>;
342
+
343
+ export function ContextMenuCheckboxItem({
344
+ className,
345
+ children,
346
+ ...props
347
+ }: ContextMenuCheckboxItemProps) {
348
+ const theme = useThemeFamily();
349
+ const { item, indicator } = contextMenu({ theme });
350
+ return (
351
+ <BaseContextMenu.CheckboxItem
352
+ data-slot="context-menu-checkbox-item"
353
+ className={item({ className })}
354
+ {...props}
355
+ >
356
+ {children}
357
+ <span className={indicator()}>
358
+ <BaseContextMenu.CheckboxItemIndicator>
359
+ <ContextMenuCheckIcon />
360
+ </BaseContextMenu.CheckboxItemIndicator>
361
+ </span>
362
+ </BaseContextMenu.CheckboxItem>
363
+ );
364
+ }
365
+
366
+ export type ContextMenuCheckboxItemIndicatorProps =
367
+ StyledProps<BaseContextMenu.CheckboxItemIndicator.Props>;
368
+
369
+ export function ContextMenuCheckboxItemIndicator({
370
+ className,
371
+ ...props
372
+ }: ContextMenuCheckboxItemIndicatorProps) {
373
+ return (
374
+ <BaseContextMenu.CheckboxItemIndicator
375
+ data-slot="context-menu-checkbox-item-indicator"
376
+ className={className}
377
+ {...props}
378
+ />
379
+ );
380
+ }
@@ -0,0 +1,34 @@
1
+ export {
2
+ ContextMenu,
3
+ ContextMenuCheckboxItem,
4
+ ContextMenuCheckboxItemIndicator,
5
+ ContextMenuContent,
6
+ ContextMenuItem,
7
+ ContextMenuLabel,
8
+ ContextMenuPortal,
9
+ ContextMenuRadioGroup,
10
+ ContextMenuRadioItem,
11
+ ContextMenuRadioItemIndicator,
12
+ ContextMenuSeparator,
13
+ ContextMenuShortcut,
14
+ ContextMenuSubmenu,
15
+ ContextMenuSubmenuTrigger,
16
+ ContextMenuTrigger,
17
+ } from "./context-menu.tsx";
18
+ export type {
19
+ ContextMenuCheckboxItemIndicatorProps,
20
+ ContextMenuCheckboxItemProps,
21
+ ContextMenuContentProps,
22
+ ContextMenuItemProps,
23
+ ContextMenuLabelProps,
24
+ ContextMenuPortalProps,
25
+ ContextMenuProps,
26
+ ContextMenuRadioGroupProps,
27
+ ContextMenuRadioItemIndicatorProps,
28
+ ContextMenuRadioItemProps,
29
+ ContextMenuSeparatorProps,
30
+ ContextMenuShortcutProps,
31
+ ContextMenuSubmenuProps,
32
+ ContextMenuSubmenuTriggerProps,
33
+ ContextMenuTriggerProps,
34
+ } from "./context-menu.tsx";