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.
- package/README.md +8 -0
- package/apps/lib/components/ActionButton.tsx +7 -12
- package/apps/lib/components/ActionsGroup.tsx +4 -15
- package/apps/lib/components/AlertDialog.tsx +173 -191
- package/apps/lib/components/Avatar.tsx +13 -16
- package/apps/lib/components/Badge.tsx +7 -3
- package/apps/lib/components/BadgeField.tsx +76 -71
- package/apps/lib/components/Breadcrumb.tsx +49 -85
- package/apps/lib/components/Button.tsx +20 -19
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +2 -13
- package/apps/lib/components/ChartBlockTool.ts +17 -52
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ContextMenu.tsx +110 -106
- package/apps/lib/components/CountBadge.tsx +4 -6
- package/apps/lib/components/DataTable.tsx +196 -216
- package/apps/lib/components/DataViews/DataViewRadio.tsx +10 -8
- package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +21 -55
- package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
- package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
- package/apps/lib/components/DataViews/FilterPanel.tsx +173 -150
- package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
- package/apps/lib/components/DataViews/InboxView.tsx +22 -68
- package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
- package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
- package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
- package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
- package/apps/lib/components/DataViews/TableView.tsx +8 -28
- package/apps/lib/components/DataViews/TreeView.tsx +12 -40
- package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
- package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
- package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +87 -0
- package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
- package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
- package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
- package/apps/lib/components/DataViews/index.ts +26 -26
- package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
- package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
- package/apps/lib/components/DataViews/types.ts +111 -114
- package/apps/lib/components/DatePicker.tsx +198 -191
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +79 -139
- package/apps/lib/components/DropdownMenu.tsx +144 -181
- package/apps/lib/components/FieldHint.tsx +4 -11
- package/apps/lib/components/Form.tsx +146 -155
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/HeaderBar.tsx +119 -0
- package/apps/lib/components/ImageAttachment.tsx +111 -73
- package/apps/lib/components/InnerLabelField.tsx +20 -16
- package/apps/lib/components/Input.tsx +171 -172
- package/apps/lib/components/InputField.tsx +44 -45
- package/apps/lib/components/InputOTP.tsx +68 -69
- package/apps/lib/components/Label.tsx +31 -35
- package/apps/lib/components/LabelField.tsx +4 -5
- package/apps/lib/components/LabeledCheckBox.tsx +8 -12
- package/apps/lib/components/LabeledRadio.tsx +7 -5
- package/apps/lib/components/LinkButton.tsx +2 -9
- package/apps/lib/components/LoginButton.tsx +4 -9
- package/apps/lib/components/PasswordLevel.tsx +5 -5
- package/apps/lib/components/Popover.tsx +15 -33
- package/apps/lib/components/ProfileMenu.tsx +67 -72
- package/apps/lib/components/Radio.tsx +1 -5
- package/apps/lib/components/RadioCard.tsx +9 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +46 -52
- package/apps/lib/components/SearchableTable.tsx +199 -219
- package/apps/lib/components/SearchableTree.tsx +469 -0
- package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
- package/apps/lib/components/SectionBlock.tsx +4 -16
- package/apps/lib/components/Select.tsx +53 -80
- package/apps/lib/components/SimpleSelect.tsx +196 -187
- package/apps/lib/components/Skeleton.tsx +9 -12
- package/apps/lib/components/SlideDatePicker.tsx +215 -166
- package/apps/lib/components/SpinLoading.tsx +33 -49
- package/apps/lib/components/Stepper.tsx +13 -56
- package/apps/lib/components/Switch.tsx +8 -10
- package/apps/lib/components/TabFormItem.tsx +3 -12
- package/apps/lib/components/TabSwitch.tsx +7 -34
- package/apps/lib/components/Table.tsx +60 -75
- package/apps/lib/components/TableDnDWrapper.ts +15 -48
- package/apps/lib/components/TextEditor.tsx +93 -104
- package/apps/lib/components/Textarea.tsx +8 -12
- package/apps/lib/components/Timeline.tsx +21 -41
- package/apps/lib/components/Toast.tsx +83 -83
- package/apps/lib/components/Toggle.tsx +112 -114
- package/apps/lib/components/ToggleButton.tsx +1 -1
- package/apps/lib/components/Tooltip.tsx +24 -19
- package/apps/lib/components/TransparentLabel.tsx +61 -62
- package/apps/lib/components/TreeDropDown.tsx +86 -52
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
- package/apps/lib/components/TreeFolder/icons.tsx +14 -17
- package/apps/lib/components/TreeFolder/index.ts +15 -8
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
- package/apps/lib/components/TreeFolder/types.ts +32 -32
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
- package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
- package/apps/lib/hooks/useClickOutside.ts +21 -20
- package/apps/lib/hooks/useDataViewsState.ts +86 -80
- package/apps/lib/hooks/useIsMobile.ts +12 -12
- package/apps/lib/hooks/useResize.ts +54 -65
- package/apps/lib/hooks/useTagSelection.ts +201 -201
- package/apps/lib/layouts/CNLayout.tsx +181 -140
- package/apps/lib/layouts/DataViewCard.tsx +4 -18
- package/apps/lib/layouts/FieldSection.tsx +2 -6
- package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
- package/apps/lib/providers/ThemeProvider.tsx +8 -23
- package/apps/lib/registry.json +1004 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/utils/cn.ts +1 -1
- package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
- package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
- package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
- package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
- package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
- package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
- package/apps/lib/utils/dateFormat.ts +64 -54
- package/apps/lib/utils/markdownParser.ts +2 -7
- package/apps/lib/utils/resize.ts +21 -25
- package/apps/lib/utils/types.ts +13 -13
- package/dist/bin/index.js +8 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
- package/dist/src/shared/getAvailableFiles.js +6 -1
- package/dist/src/shared/getAvailableFiles.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +7 -0
- package/dist/src/shared/loadRegistry.d.ts.map +1 -0
- package/dist/src/shared/loadRegistry.js +31 -0
- package/dist/src/shared/loadRegistry.js.map +1 -0
- package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
- package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
- package/dist/src/shared/resolveInstallPlan.js +39 -0
- package/dist/src/shared/resolveInstallPlan.js.map +1 -0
- package/dist/src/types/main.d.ts +24 -0
- package/dist/src/types/main.d.ts.map +1 -1
- package/docs/README.md +10 -2
- package/docs/components/action-button.md +30 -24
- package/docs/components/actions-group.md +26 -20
- package/docs/components/alert-dialog.md +45 -45
- package/docs/components/avatar.md +6 -2
- package/docs/components/badge-field.md +6 -2
- package/docs/components/badge.md +7 -1
- package/docs/components/breadcrumb.md +15 -40
- package/docs/components/button-group.md +13 -10
- package/docs/components/button.md +58 -33
- package/docs/components/calendar.md +26 -19
- package/docs/components/card.md +19 -16
- package/docs/components/chart-block-tool.md +128 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/context-menu.md +47 -24
- package/docs/components/count-badge.md +7 -1
- package/docs/components/data-table.md +45 -33
- package/docs/components/data-views-config-panel.md +18 -14
- package/docs/components/data-views-layout.md +20 -17
- package/docs/components/date-picker.md +30 -23
- package/docs/components/dialog.md +43 -42
- package/docs/components/divider.md +10 -4
- package/docs/components/drawer.md +8 -33
- package/docs/components/dropdown-menu.md +51 -32
- package/docs/components/field-hint.md +37 -25
- package/docs/components/field-section.md +9 -3
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +187 -0
- package/docs/components/image-attachment.md +33 -41
- package/docs/components/inbox-view.md +16 -5
- package/docs/components/inner-label-field.md +34 -24
- package/docs/components/input-field.md +18 -10
- package/docs/components/input-otp.md +14 -11
- package/docs/components/input.md +22 -16
- package/docs/components/kanban-view.md +15 -5
- package/docs/components/label-field.md +32 -22
- package/docs/components/label.md +43 -32
- package/docs/components/labeled-check-box.md +16 -8
- package/docs/components/labeled-radio.md +18 -11
- package/docs/components/link-button.md +7 -1
- package/docs/components/login-button.md +8 -2
- package/docs/components/password-level.md +37 -24
- package/docs/components/popover.md +26 -23
- package/docs/components/profile-menu.md +38 -27
- package/docs/components/radio-card.md +16 -9
- package/docs/components/radio.md +16 -8
- package/docs/components/scroll-area.md +6 -2
- package/docs/components/search-field.md +14 -6
- package/docs/components/searchable-select.md +19 -14
- package/docs/components/searchable-table.md +60 -41
- package/docs/components/searchable-tree-dialog.md +190 -0
- package/docs/components/searchable-tree.md +200 -0
- package/docs/components/section-block.md +130 -4
- package/docs/components/select.md +23 -18
- package/docs/components/simple-select.md +14 -10
- package/docs/components/skeleton.md +43 -33
- package/docs/components/slide-date-picker.md +37 -29
- package/docs/components/spin-loading.md +32 -23
- package/docs/components/stepper.md +6 -0
- package/docs/components/switch.md +14 -6
- package/docs/components/tab-form-item.md +7 -1
- package/docs/components/tab-switch.md +13 -6
- package/docs/components/table-dnd-wrapper.md +105 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +19 -13
- package/docs/components/textarea.md +15 -7
- package/docs/components/timeline.md +6 -0
- package/docs/components/toast.md +35 -26
- package/docs/components/toggle-button.md +24 -21
- package/docs/components/toggle.md +23 -15
- package/docs/components/tooltip.md +42 -30
- package/docs/components/transparent-label.md +29 -20
- package/docs/components/tree-drop-down.md +31 -23
- package/docs/components/tree-sub-layout.md +6 -2
- package/docs/components/tree-view.md +16 -5
- package/docs/explanation/architecture.md +54 -0
- package/docs/explanation/design-system.md +52 -0
- package/docs/how-to/data-views-from-backend-response.md +7 -4
- package/docs/how-to/guides.md +24 -18
- package/docs/migration/changelog.md +38 -0
- package/docs/reference/cli.md +87 -0
- package/docs/reference/components.md +11 -12
- package/docs/reference/hooks.md +8 -8
- package/docs/reference/providers.md +22 -22
- package/docs/reference/tailwind-plugins.md +2 -2
- package/docs/reference/theme.md +85 -0
- package/docs/reference/types.md +4 -4
- package/docs/reference/utilities.md +19 -26
- package/docs/tutorials/building-first-form.md +20 -13
- package/docs/tutorials/component-composition.md +34 -50
- package/docs/tutorials/getting-started.md +2 -2
- package/docs/tutorials/theming-basics.md +13 -10
- package/package.json +31 -3
- package/dist/src/commands/block.d.ts +0 -5
- package/dist/src/commands/block.d.ts.map +0 -1
- package/dist/src/commands/block.js +0 -255
- package/dist/src/commands/block.js.map +0 -1
- package/dist/src/shared/configureFonts.d.ts +0 -6
- package/dist/src/shared/configureFonts.d.ts.map +0 -1
- package/dist/src/shared/configureFonts.js +0 -106
- package/dist/src/shared/configureFonts.js.map +0 -1
- package/dist/src/shared/configureGlobalCss.d.ts +0 -6
- package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
- package/dist/src/shared/configureGlobalCss.js +0 -154
- package/dist/src/shared/configureGlobalCss.js.map +0 -1
- package/dist/src/shared/configureTailwind.d.ts +0 -7
- package/dist/src/shared/configureTailwind.d.ts.map +0 -1
- package/dist/src/shared/configureTailwind.js +0 -163
- package/dist/src/shared/configureTailwind.js.map +0 -1
- package/dist/src/shared/detectFramework.d.ts +0 -23
- package/dist/src/shared/detectFramework.d.ts.map +0 -1
- package/dist/src/shared/detectFramework.js +0 -119
- package/dist/src/shared/detectFramework.js.map +0 -1
- package/dist/src/shared/installBaseUtils.d.ts +0 -5
- package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
- package/dist/src/shared/installBaseUtils.js +0 -79
- package/dist/src/shared/installBaseUtils.js.map +0 -1
- package/dist/src/shared/resolveAliases.d.ts +0 -24
- package/dist/src/shared/resolveAliases.d.ts.map +0 -1
- package/dist/src/shared/resolveAliases.js +0 -98
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
189
|
-
<ContextMenuPrimitive.
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
-
|
|
224
|
-
>(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
>
|
|
237
|
-
<
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
<div className="
|
|
241
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
|
|
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
|
|
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-
|
|
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 }) => {
|