torch-glare 2.3.0 → 2.4.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 (264) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +7 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +20 -19
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +2 -13
  13. package/apps/lib/components/ChartBlockTool.ts +17 -52
  14. package/apps/lib/components/Checkbox.tsx +9 -16
  15. package/apps/lib/components/ContextMenu.tsx +110 -106
  16. package/apps/lib/components/CountBadge.tsx +4 -6
  17. package/apps/lib/components/DataTable.tsx +196 -216
  18. package/apps/lib/components/DataViews/DataViewRadio.tsx +10 -8
  19. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +21 -55
  20. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  21. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  22. package/apps/lib/components/DataViews/FilterPanel.tsx +173 -150
  23. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  24. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  25. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  26. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  27. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  28. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  29. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  30. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  31. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  32. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  33. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +87 -0
  34. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  35. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  36. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  37. package/apps/lib/components/DataViews/index.ts +26 -26
  38. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  39. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  40. package/apps/lib/components/DataViews/types.ts +111 -114
  41. package/apps/lib/components/DatePicker.tsx +198 -191
  42. package/apps/lib/components/Dialog.tsx +92 -105
  43. package/apps/lib/components/Divider.tsx +21 -24
  44. package/apps/lib/components/Drawer.tsx +79 -139
  45. package/apps/lib/components/DropdownMenu.tsx +144 -181
  46. package/apps/lib/components/FieldHint.tsx +4 -11
  47. package/apps/lib/components/Form.tsx +146 -155
  48. package/apps/lib/components/FormStepper.tsx +9 -39
  49. package/apps/lib/components/HeaderBar.tsx +119 -0
  50. package/apps/lib/components/ImageAttachment.tsx +111 -73
  51. package/apps/lib/components/InnerLabelField.tsx +20 -16
  52. package/apps/lib/components/Input.tsx +171 -172
  53. package/apps/lib/components/InputField.tsx +44 -45
  54. package/apps/lib/components/InputOTP.tsx +68 -69
  55. package/apps/lib/components/Label.tsx +31 -35
  56. package/apps/lib/components/LabelField.tsx +4 -5
  57. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  58. package/apps/lib/components/LabeledRadio.tsx +7 -5
  59. package/apps/lib/components/LinkButton.tsx +2 -9
  60. package/apps/lib/components/LoginButton.tsx +4 -9
  61. package/apps/lib/components/PasswordLevel.tsx +5 -5
  62. package/apps/lib/components/Popover.tsx +15 -33
  63. package/apps/lib/components/ProfileMenu.tsx +67 -72
  64. package/apps/lib/components/Radio.tsx +1 -5
  65. package/apps/lib/components/RadioCard.tsx +9 -28
  66. package/apps/lib/components/ScrollArea.tsx +45 -43
  67. package/apps/lib/components/SearchField.tsx +49 -39
  68. package/apps/lib/components/SearchableSelect.tsx +46 -52
  69. package/apps/lib/components/SearchableTable.tsx +199 -219
  70. package/apps/lib/components/SearchableTree.tsx +469 -0
  71. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  72. package/apps/lib/components/SectionBlock.tsx +4 -16
  73. package/apps/lib/components/Select.tsx +53 -80
  74. package/apps/lib/components/SimpleSelect.tsx +196 -187
  75. package/apps/lib/components/Skeleton.tsx +9 -12
  76. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  77. package/apps/lib/components/SpinLoading.tsx +33 -49
  78. package/apps/lib/components/Stepper.tsx +13 -56
  79. package/apps/lib/components/Switch.tsx +8 -10
  80. package/apps/lib/components/TabFormItem.tsx +3 -12
  81. package/apps/lib/components/TabSwitch.tsx +7 -34
  82. package/apps/lib/components/Table.tsx +60 -75
  83. package/apps/lib/components/TableDnDWrapper.ts +15 -48
  84. package/apps/lib/components/TextEditor.tsx +93 -104
  85. package/apps/lib/components/Textarea.tsx +8 -12
  86. package/apps/lib/components/Timeline.tsx +21 -41
  87. package/apps/lib/components/Toast.tsx +83 -83
  88. package/apps/lib/components/Toggle.tsx +112 -114
  89. package/apps/lib/components/ToggleButton.tsx +1 -1
  90. package/apps/lib/components/Tooltip.tsx +24 -19
  91. package/apps/lib/components/TransparentLabel.tsx +61 -62
  92. package/apps/lib/components/TreeDropDown.tsx +86 -52
  93. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  94. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  95. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  96. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  97. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  98. package/apps/lib/components/TreeFolder/index.ts +15 -8
  99. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  100. package/apps/lib/components/TreeFolder/types.ts +32 -32
  101. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  102. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  103. package/apps/lib/hooks/useClickOutside.ts +21 -20
  104. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  105. package/apps/lib/hooks/useIsMobile.ts +12 -12
  106. package/apps/lib/hooks/useResize.ts +54 -65
  107. package/apps/lib/hooks/useTagSelection.ts +201 -201
  108. package/apps/lib/layouts/CNLayout.tsx +181 -140
  109. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  110. package/apps/lib/layouts/FieldSection.tsx +2 -6
  111. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  112. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  113. package/apps/lib/registry.json +1004 -0
  114. package/apps/lib/tsconfig.json +9 -0
  115. package/apps/lib/utils/cn.ts +1 -1
  116. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  117. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  118. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  119. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  120. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  121. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  122. package/apps/lib/utils/dateFormat.ts +64 -54
  123. package/apps/lib/utils/markdownParser.ts +2 -7
  124. package/apps/lib/utils/resize.ts +21 -25
  125. package/apps/lib/utils/types.ts +13 -13
  126. package/dist/bin/index.js +8 -2
  127. package/dist/bin/index.js.map +1 -1
  128. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  129. package/dist/src/shared/getAvailableFiles.js +6 -1
  130. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  131. package/dist/src/shared/loadRegistry.d.ts +7 -0
  132. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  133. package/dist/src/shared/loadRegistry.js +31 -0
  134. package/dist/src/shared/loadRegistry.js.map +1 -0
  135. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  136. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  137. package/dist/src/shared/resolveInstallPlan.js +39 -0
  138. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  139. package/dist/src/types/main.d.ts +24 -0
  140. package/dist/src/types/main.d.ts.map +1 -1
  141. package/docs/README.md +10 -2
  142. package/docs/components/action-button.md +30 -24
  143. package/docs/components/actions-group.md +26 -20
  144. package/docs/components/alert-dialog.md +45 -45
  145. package/docs/components/avatar.md +6 -2
  146. package/docs/components/badge-field.md +6 -2
  147. package/docs/components/badge.md +7 -1
  148. package/docs/components/breadcrumb.md +15 -40
  149. package/docs/components/button-group.md +13 -10
  150. package/docs/components/button.md +58 -33
  151. package/docs/components/calendar.md +26 -19
  152. package/docs/components/card.md +19 -16
  153. package/docs/components/chart-block-tool.md +128 -0
  154. package/docs/components/checkbox.md +16 -8
  155. package/docs/components/cn-layout.md +7 -1
  156. package/docs/components/context-menu.md +47 -24
  157. package/docs/components/count-badge.md +7 -1
  158. package/docs/components/data-table.md +45 -33
  159. package/docs/components/data-views-config-panel.md +18 -14
  160. package/docs/components/data-views-layout.md +20 -17
  161. package/docs/components/date-picker.md +30 -23
  162. package/docs/components/dialog.md +43 -42
  163. package/docs/components/divider.md +10 -4
  164. package/docs/components/drawer.md +8 -33
  165. package/docs/components/dropdown-menu.md +51 -32
  166. package/docs/components/field-hint.md +37 -25
  167. package/docs/components/field-section.md +9 -3
  168. package/docs/components/form-stepper.md +6 -0
  169. package/docs/components/form.md +17 -20
  170. package/docs/components/header-bar.md +187 -0
  171. package/docs/components/image-attachment.md +33 -41
  172. package/docs/components/inbox-view.md +16 -5
  173. package/docs/components/inner-label-field.md +34 -24
  174. package/docs/components/input-field.md +18 -10
  175. package/docs/components/input-otp.md +14 -11
  176. package/docs/components/input.md +22 -16
  177. package/docs/components/kanban-view.md +15 -5
  178. package/docs/components/label-field.md +32 -22
  179. package/docs/components/label.md +43 -32
  180. package/docs/components/labeled-check-box.md +16 -8
  181. package/docs/components/labeled-radio.md +18 -11
  182. package/docs/components/link-button.md +7 -1
  183. package/docs/components/login-button.md +8 -2
  184. package/docs/components/password-level.md +37 -24
  185. package/docs/components/popover.md +26 -23
  186. package/docs/components/profile-menu.md +38 -27
  187. package/docs/components/radio-card.md +16 -9
  188. package/docs/components/radio.md +16 -8
  189. package/docs/components/scroll-area.md +6 -2
  190. package/docs/components/search-field.md +14 -6
  191. package/docs/components/searchable-select.md +19 -14
  192. package/docs/components/searchable-table.md +60 -41
  193. package/docs/components/searchable-tree-dialog.md +190 -0
  194. package/docs/components/searchable-tree.md +200 -0
  195. package/docs/components/section-block.md +130 -4
  196. package/docs/components/select.md +23 -18
  197. package/docs/components/simple-select.md +14 -10
  198. package/docs/components/skeleton.md +43 -33
  199. package/docs/components/slide-date-picker.md +37 -29
  200. package/docs/components/spin-loading.md +32 -23
  201. package/docs/components/stepper.md +6 -0
  202. package/docs/components/switch.md +14 -6
  203. package/docs/components/tab-form-item.md +7 -1
  204. package/docs/components/tab-switch.md +13 -6
  205. package/docs/components/table-dnd-wrapper.md +105 -0
  206. package/docs/components/table-view.md +15 -5
  207. package/docs/components/table.md +28 -28
  208. package/docs/components/text-editor.md +19 -13
  209. package/docs/components/textarea.md +15 -7
  210. package/docs/components/timeline.md +6 -0
  211. package/docs/components/toast.md +35 -26
  212. package/docs/components/toggle-button.md +24 -21
  213. package/docs/components/toggle.md +23 -15
  214. package/docs/components/tooltip.md +42 -30
  215. package/docs/components/transparent-label.md +29 -20
  216. package/docs/components/tree-drop-down.md +31 -23
  217. package/docs/components/tree-sub-layout.md +6 -2
  218. package/docs/components/tree-view.md +16 -5
  219. package/docs/explanation/architecture.md +54 -0
  220. package/docs/explanation/design-system.md +52 -0
  221. package/docs/how-to/data-views-from-backend-response.md +7 -4
  222. package/docs/how-to/guides.md +24 -18
  223. package/docs/migration/changelog.md +38 -0
  224. package/docs/reference/cli.md +87 -0
  225. package/docs/reference/components.md +11 -12
  226. package/docs/reference/hooks.md +8 -8
  227. package/docs/reference/providers.md +22 -22
  228. package/docs/reference/tailwind-plugins.md +2 -2
  229. package/docs/reference/theme.md +85 -0
  230. package/docs/reference/types.md +4 -4
  231. package/docs/reference/utilities.md +19 -26
  232. package/docs/tutorials/building-first-form.md +20 -13
  233. package/docs/tutorials/component-composition.md +34 -50
  234. package/docs/tutorials/getting-started.md +2 -2
  235. package/docs/tutorials/theming-basics.md +13 -10
  236. package/package.json +31 -3
  237. package/dist/src/commands/block.d.ts +0 -5
  238. package/dist/src/commands/block.d.ts.map +0 -1
  239. package/dist/src/commands/block.js +0 -255
  240. package/dist/src/commands/block.js.map +0 -1
  241. package/dist/src/shared/configureFonts.d.ts +0 -6
  242. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  243. package/dist/src/shared/configureFonts.js +0 -106
  244. package/dist/src/shared/configureFonts.js.map +0 -1
  245. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  246. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  247. package/dist/src/shared/configureGlobalCss.js +0 -154
  248. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  249. package/dist/src/shared/configureTailwind.d.ts +0 -7
  250. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  251. package/dist/src/shared/configureTailwind.js +0 -163
  252. package/dist/src/shared/configureTailwind.js.map +0 -1
  253. package/dist/src/shared/detectFramework.d.ts +0 -23
  254. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  255. package/dist/src/shared/detectFramework.js +0 -119
  256. package/dist/src/shared/detectFramework.js.map +0 -1
  257. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  258. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  259. package/dist/src/shared/installBaseUtils.js +0 -79
  260. package/dist/src/shared/installBaseUtils.js.map +0 -1
  261. package/dist/src/shared/resolveAliases.d.ts +0 -24
  262. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  263. package/dist/src/shared/resolveAliases.js +0 -98
  264. package/dist/src/shared/resolveAliases.js.map +0 -1
@@ -45,16 +45,12 @@ const ContextMenu = ({
45
45
  if (!isControlled) setOpenState(next);
46
46
  onOpenChange?.(next);
47
47
  },
48
- [isControlled, onOpenChange]
48
+ [isControlled, onOpenChange],
49
49
  );
50
50
 
51
51
  return (
52
52
  <ContextMenuOpenContext.Provider value={{ open: actualOpen, setOpen }}>
53
- <ContextMenuPrimitive.Root
54
- open={actualOpen}
55
- onOpenChange={setOpen}
56
- {...props}
57
- >
53
+ <ContextMenuPrimitive.Root open={actualOpen} onOpenChange={setOpen} {...props}>
58
54
  {children}
59
55
  </ContextMenuPrimitive.Root>
60
56
  </ContextMenuOpenContext.Provider>
@@ -96,7 +92,7 @@ const ContextMenuSub = ContextMenuPrimitive.Sub;
96
92
  const ContextMenuGroup = React.forwardRef<
97
93
  React.ElementRef<typeof ContextMenuPrimitive.Group>,
98
94
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Group> &
99
- VariantProps<typeof menuGroupStyles>
95
+ VariantProps<typeof menuGroupStyles>
100
96
  >(({ className, variant = "Boxed", ...props }, ref) => (
101
97
  <ContextMenuPrimitive.Group
102
98
  ref={ref}
@@ -109,7 +105,7 @@ ContextMenuGroup.displayName = ContextMenuPrimitive.Group.displayName;
109
105
  const ContextMenuRadioGroup = React.forwardRef<
110
106
  React.ElementRef<typeof ContextMenuPrimitive.RadioGroup>,
111
107
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioGroup> &
112
- VariantProps<typeof menuGroupStyles>
108
+ VariantProps<typeof menuGroupStyles>
113
109
  >(({ className, variant = "Boxed", ...props }, ref) => (
114
110
  <ContextMenuPrimitive.RadioGroup
115
111
  ref={ref}
@@ -122,7 +118,7 @@ ContextMenuRadioGroup.displayName = ContextMenuPrimitive.RadioGroup.displayName;
122
118
  const ContextMenuContent = React.forwardRef<
123
119
  React.ElementRef<typeof ContextMenuPrimitive.Content>,
124
120
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content> &
125
- ContextMenuContentProps & { autoGroup?: boolean }
121
+ ContextMenuContentProps & { autoGroup?: boolean; maxHeight?: number }
126
122
  >(
127
123
  (
128
124
  {
@@ -131,29 +127,31 @@ const ContextMenuContent = React.forwardRef<
131
127
  variant = "PresentationStyle",
132
128
  autoGroup = true,
133
129
  collisionPadding = 8,
130
+ maxHeight = 320,
131
+ style,
134
132
  children,
135
133
  ...props
136
134
  },
137
- ref
135
+ ref,
138
136
  ) => (
139
137
  <ContextMenuPrimitive.Portal>
140
138
  <ContextMenuPrimitive.Content
141
139
  data-theme={theme}
142
140
  ref={ref}
143
141
  collisionPadding={collisionPadding}
144
- className={cn(
145
- menuContentStyles({ variant }),
146
- // Cap to the space Radix has after collision handling so a tall menu
147
- // scrolls instead of overflowing off-screen.
148
- "max-h-[var(--radix-context-menu-content-available-height)]",
149
- className
150
- )}
142
+ // Cap at maxHeight, but never exceed the space Radix has after collision
143
+ // handling. The menu scrolls (overflow on the surface) past this height.
144
+ style={{
145
+ maxHeight: `min(${maxHeight}px, var(--radix-context-menu-content-available-height))`,
146
+ ...style,
147
+ }}
148
+ className={cn(menuContentStyles({ variant }), className)}
151
149
  {...props}
152
150
  >
153
151
  {autoGroup ? autoGroupChildren(children) : children}
154
152
  </ContextMenuPrimitive.Content>
155
153
  </ContextMenuPrimitive.Portal>
156
- )
154
+ ),
157
155
  );
158
156
  ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
159
157
 
@@ -162,20 +160,19 @@ const ContextMenuSubTrigger = React.forwardRef<
162
160
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {
163
161
  inset?: boolean;
164
162
  } & VariantProps<typeof MenuItemStyles>
165
- >(
166
- ({ className, inset, children, variant = "Default", size = "M", ...props }, ref) => (
167
- <ContextMenuPrimitive.SubTrigger
168
- ref={ref}
169
- className={cn(MenuItemStyles({ variant, size }), "justify-between", className)}
170
- {...props}
171
- >
172
- <div className="justify-between">
173
- <div className="flex gap-2">{children}</div>
174
- <i className="ri-arrow-right-s-line text-[16px] rtl:rotate-180"></i>
175
- </div>
176
- </ContextMenuPrimitive.SubTrigger>
177
- )
178
- );
163
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- inset destructured to exclude it from spread
164
+ >(({ className, inset, children, variant = "Default", size = "M", ...props }, ref) => (
165
+ <ContextMenuPrimitive.SubTrigger
166
+ ref={ref}
167
+ className={cn(MenuItemStyles({ variant, size }), "justify-between", className)}
168
+ {...props}
169
+ >
170
+ <div className="justify-between">
171
+ <div className="flex gap-2">{children}</div>
172
+ <i className="ri-arrow-right-s-line text-[16px] rtl:rotate-180"></i>
173
+ </div>
174
+ </ContextMenuPrimitive.SubTrigger>
175
+ ));
179
176
  ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
180
177
 
181
178
  const ContextMenuSubContent = React.forwardRef<
@@ -184,19 +181,17 @@ const ContextMenuSubContent = React.forwardRef<
184
181
  variant?: "PresentationStyle";
185
182
  autoGroup?: boolean;
186
183
  }
187
- >(
188
- ({ className, variant = "PresentationStyle", autoGroup = true, children, ...props }, ref) => (
189
- <ContextMenuPrimitive.Portal>
190
- <ContextMenuPrimitive.SubContent
191
- ref={ref}
192
- className={cn(menuContentStyles({ variant }), className)}
193
- {...props}
194
- >
195
- {autoGroup ? autoGroupChildren(children) : children}
196
- </ContextMenuPrimitive.SubContent>
197
- </ContextMenuPrimitive.Portal>
198
- )
199
- );
184
+ >(({ className, variant = "PresentationStyle", autoGroup = true, children, ...props }, ref) => (
185
+ <ContextMenuPrimitive.Portal>
186
+ <ContextMenuPrimitive.SubContent
187
+ ref={ref}
188
+ className={cn(menuContentStyles({ variant }), className)}
189
+ {...props}
190
+ >
191
+ {autoGroup ? autoGroupChildren(children) : children}
192
+ </ContextMenuPrimitive.SubContent>
193
+ </ContextMenuPrimitive.Portal>
194
+ ));
200
195
  ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
201
196
 
202
197
  const ContextMenuItem = React.forwardRef<
@@ -204,63 +199,69 @@ const ContextMenuItem = React.forwardRef<
204
199
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
205
200
  inset?: boolean;
206
201
  } & VariantProps<typeof MenuItemStyles>
207
- >(
208
- ({ className, inset, children, variant = "Default", size = "M", active, ...props }, ref) => (
209
- <ContextMenuPrimitive.Item
210
- {...props}
211
- ref={ref}
212
- className={cn(MenuItemStyles({ variant, size, active }), className)}
213
- >
214
- <div>{children}</div>
215
- </ContextMenuPrimitive.Item>
216
- )
217
- );
202
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- inset destructured to exclude it from spread
203
+ >(({ className, inset, children, variant = "Default", size = "M", active, ...props }, ref) => (
204
+ <ContextMenuPrimitive.Item
205
+ {...props}
206
+ ref={ref}
207
+ className={cn(MenuItemStyles({ variant, size, active }), className)}
208
+ >
209
+ <div>{children}</div>
210
+ </ContextMenuPrimitive.Item>
211
+ ));
218
212
  ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
219
213
 
220
214
  const ContextMenuCheckboxItem = React.forwardRef<
221
215
  React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
222
216
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem> &
223
- VariantProps<typeof MenuItemStyles>
224
- >(
225
- ({ className, children, checked, variant = "Default", size = "M", onSelect, ...props }, ref) => (
226
- <ContextMenuPrimitive.CheckboxItem
227
- ref={ref}
228
- className={cn(MenuItemStyles({ variant, size }), "relative", className)}
229
- checked={checked}
230
- // Keep the menu open when toggling; preventDefault stops Radix's auto-close.
231
- onSelect={(event) => {
232
- event.preventDefault();
233
- onSelect?.(event);
234
- }}
235
- {...props}
236
- >
237
- <div className="relative flex items-center">
238
- <span className="h-full flex items-center justify-center">
239
- {/* Unchecked box; hidden once the item is checked. */}
240
- <div className="flex justify-center items-center h-full [[data-state=checked]_&]:hidden">
241
- <div className="w-[16px] h-[16px] rounded-[3px] border border-white-alpha-40 bg-black-alpha-15 group-hover:border-white-700 group-hover:bg-black-alpha-075"></div>
242
- </div>
217
+ VariantProps<typeof MenuItemStyles>
218
+ >(({ className, children, checked, variant = "Default", size = "M", onSelect, ...props }, ref) => (
219
+ <ContextMenuPrimitive.CheckboxItem
220
+ ref={ref}
221
+ className={cn(MenuItemStyles({ variant, size }), "relative", className)}
222
+ checked={checked}
223
+ // Keep the menu open when toggling; preventDefault stops Radix's auto-close.
224
+ onSelect={(event) => {
225
+ event.preventDefault();
226
+ onSelect?.(event);
227
+ }}
228
+ {...props}
229
+ >
230
+ <div className="relative flex items-center">
231
+ <span className="h-full flex items-center justify-center">
232
+ {/* Unchecked box; hidden once the item is checked. */}
233
+ <div className="flex justify-center items-center h-full [[data-state=checked]_&]:hidden">
234
+ <div className="w-[16px] h-[16px] rounded-[3px] border border-white-alpha-40 bg-black-alpha-15 group-hover:border-white-700 group-hover:bg-black-alpha-075"></div>
235
+ </div>
243
236
 
244
- {/* Checked indicator only renders when checked. */}
245
- <ContextMenuPrimitive.ItemIndicator>
246
- <div className="bg-blue-sparkle-600 flex justify-center items-center w-[16px] h-[16px] rounded-[3px]">
247
- <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
248
- <path d="M5.8339 8.84977L11.1961 3.48755L12.0211 4.3125L5.8339 10.4997L2.12158 6.7874L2.94654 5.96245L5.8339 8.84977Z" fill="#F9F9F9" />
249
- </svg>
250
- </div>
251
- </ContextMenuPrimitive.ItemIndicator>
252
- </span>{" "}
253
- {children}
254
- </div>
255
- </ContextMenuPrimitive.CheckboxItem>
256
- )
257
- );
237
+ {/* Checked indicator only renders when checked. */}
238
+ <ContextMenuPrimitive.ItemIndicator>
239
+ <div className="bg-blue-sparkle-600 flex justify-center items-center w-[16px] h-[16px] rounded-[3px]">
240
+ <svg
241
+ xmlns="http://www.w3.org/2000/svg"
242
+ width="14"
243
+ height="14"
244
+ viewBox="0 0 14 14"
245
+ fill="none"
246
+ >
247
+ <path
248
+ d="M5.8339 8.84977L11.1961 3.48755L12.0211 4.3125L5.8339 10.4997L2.12158 6.7874L2.94654 5.96245L5.8339 8.84977Z"
249
+ fill="#F9F9F9"
250
+ />
251
+ </svg>
252
+ </div>
253
+ </ContextMenuPrimitive.ItemIndicator>
254
+ </span>{" "}
255
+ {children}
256
+ </div>
257
+ </ContextMenuPrimitive.CheckboxItem>
258
+ ));
258
259
  ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
259
260
 
260
261
  const ContextMenuRadioItem = React.forwardRef<
261
262
  React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
262
263
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem> &
263
- VariantProps<typeof MenuItemStyles>
264
+ VariantProps<typeof MenuItemStyles>
264
265
  >(({ className, children, variant = "Default", size = "M", onSelect, ...props }, ref) => (
265
266
  <ContextMenuPrimitive.RadioItem
266
267
  ref={ref}
@@ -279,7 +280,13 @@ const ContextMenuRadioItem = React.forwardRef<
279
280
  <div className="w-[14px] h-[14px] rounded-[100px] border border-white-alpha-40 bg-black-alpha-15 group-hover:border-white-700 group-hover:bg-black-alpha-075"></div>
280
281
  </div>
281
282
  <ContextMenuPrimitive.ItemIndicator>
282
- <svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 14" fill="none">
283
+ <svg
284
+ xmlns="http://www.w3.org/2000/svg"
285
+ width="14"
286
+ height="16"
287
+ viewBox="0 0 14 14"
288
+ fill="none"
289
+ >
283
290
  <rect width="14" height="14" rx="7" fill="#005ECC" />
284
291
  <rect x="5" y="5" width="4" height="4" rx="2" fill="white" />
285
292
  </svg>
@@ -302,9 +309,7 @@ const GROUPABLE_TYPES = [
302
309
 
303
310
  const isGroupable = (child: React.ReactNode): child is React.ReactElement =>
304
311
  React.isValidElement(child) &&
305
- (GROUPABLE_TYPES as readonly React.ElementType[]).includes(
306
- child.type as React.ElementType
307
- );
312
+ (GROUPABLE_TYPES as readonly React.ElementType[]).includes(child.type as React.ElementType);
308
313
 
309
314
  // Wraps consecutive runs of loose items in a Boxed ContextMenuGroup so items
310
315
  // render inside a container even when the consumer doesn't write one. Labels,
@@ -318,7 +323,7 @@ function autoGroupChildren(children: React.ReactNode): React.ReactNode {
318
323
  out.push(
319
324
  <ContextMenuGroup key={key} variant="Boxed">
320
325
  {run}
321
- </ContextMenuGroup>
326
+ </ContextMenuGroup>,
322
327
  );
323
328
  run = [];
324
329
  };
@@ -341,22 +346,20 @@ const ContextMenuLabel = React.forwardRef<
341
346
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {
342
347
  inset?: boolean;
343
348
  }
349
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- inset destructured to exclude it from spread
344
350
  >(({ className, inset, ...props }, ref) => (
345
351
  <ContextMenuPrimitive.Label
346
352
  ref={ref}
347
353
  className={cn(
348
354
  "text-content-presentation-global-primary-light typography-body-small-medium px-[12px] pt-1 flex justify-start items-center",
349
- className
355
+ className,
350
356
  )}
351
357
  {...props}
352
358
  />
353
359
  ));
354
360
  ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
355
361
 
356
- const ContextMenuShortcut = ({
357
- className,
358
- ...props
359
- }: React.HTMLAttributes<HTMLSpanElement>) => (
362
+ const ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (
360
363
  <span
361
364
  className={cn("ml-auto ltr:ml-0 rtl:mr-auto text-xs tracking-widest opacity-60", className)}
362
365
  {...props}
@@ -388,6 +391,7 @@ const MenuItemStyles = cva(
388
391
  "border",
389
392
  "border-transparent",
390
393
  "flex",
394
+ "shrink-0", // keep full row height so the menu scrolls instead of squishing
391
395
  "items-center",
392
396
  "justify-start",
393
397
  "text-overflow",
@@ -474,7 +478,7 @@ const MenuItemStyles = cva(
474
478
  className: ["text-content-presentation-state-negative"],
475
479
  },
476
480
  ],
477
- }
481
+ },
478
482
  );
479
483
 
480
484
  const menuContentStyles = cva(
@@ -483,13 +487,13 @@ const menuContentStyles = cva(
483
487
  "rounded-[14px]",
484
488
  "min-w-[240px]",
485
489
  "outline-none",
486
- "overflow-scroll",
490
+ "overflow-y-auto",
491
+ "overflow-x-hidden",
487
492
  // Only animate the OPEN (enter) state. An exit animation on [data-state=closed]
488
493
  // holds the old DOM node during close, which breaks close/reposition on a
489
494
  // second right-click (Radix issue #2572).
490
495
  "data-[state=open]:animate-in",
491
496
  "data-[state=open]:fade-in-0",
492
- "overflow-x-hidden",
493
497
  "scrollbar-hide",
494
498
  "backdrop-blur-[21px]",
495
499
  "flex gap-1 flex-col",
@@ -506,10 +510,10 @@ const menuContentStyles = cva(
506
510
  variant: "PresentationStyle",
507
511
  },
508
512
  },
509
- }
513
+ },
510
514
  );
511
515
 
512
- const menuGroupStyles = cva(["flex", "flex-col"], {
516
+ const menuGroupStyles = cva(["flex", "flex-col", "shrink-0"], {
513
517
  variants: {
514
518
  variant: {
515
519
  // Visually contains its items in a bordered card.
@@ -25,18 +25,16 @@ export const glareCounterStyles = cva(
25
25
  defaultVariants: {
26
26
  variant: "default",
27
27
  },
28
- }
28
+ },
29
29
  );
30
30
 
31
31
  // Extracting the types of the variants used in glareCounterStyles
32
32
  export type GlareCounterStylesProps = VariantProps<typeof glareCounterStyles>;
33
33
 
34
- interface Props
35
- extends HTMLAttributes<HTMLDivElement>,
36
- GlareCounterStylesProps {
34
+ interface Props extends HTMLAttributes<HTMLDivElement>, GlareCounterStylesProps {
37
35
  label: number; // label of the counter it should be a number
38
- theme?: Themes
39
- className?: string
36
+ theme?: Themes;
37
+ className?: string;
40
38
  }
41
39
 
42
40
  export const CountBadge: React.FC<Props> = ({ theme, label, variant, className, ...props }) => {