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
|
@@ -5,86 +5,81 @@ import { Popover, PopoverContent, PopoverTrigger } from "./Popover";
|
|
|
5
5
|
|
|
6
6
|
// Define the base styles and variants using `cva`
|
|
7
7
|
export const profileItemStyles = cva(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
"flex items-center justify-between group w-full p-[6px] outline-none rounded-[8px] fucus:bg-background-system-action-primary-selected active:bg-background-system-action-primary-selected transition-all ease-in-out duration-150",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
selected: {
|
|
12
|
+
true: "bg-background-system-action-primary-selected",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
16
|
);
|
|
17
17
|
|
|
18
18
|
interface ProfileItemProps extends HTMLAttributes<HTMLButtonElement> {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
label: ReactNode;
|
|
20
|
+
selected?: boolean;
|
|
21
|
+
icon?: string;
|
|
22
|
+
theme?: "dark" | "light" | "default";
|
|
23
|
+
popoverChildren?: ReactNode;
|
|
24
|
+
overlayBlur?: boolean;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export const ProfileMenu: React.FC<ProfileItemProps> = ({
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
label,
|
|
29
|
+
selected,
|
|
30
|
+
icon,
|
|
31
|
+
theme,
|
|
32
|
+
className,
|
|
33
|
+
popoverChildren,
|
|
34
|
+
overlayBlur,
|
|
35
|
+
...props
|
|
36
36
|
}) => {
|
|
37
|
+
const [isOpen, setIsOpen] = useState(selected);
|
|
38
|
+
const [dropdownWidth, setDropdownWidth] = useState(0);
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
setIsOpen(selected);
|
|
42
|
+
}, [selected]);
|
|
43
|
+
return (
|
|
44
|
+
<Popover onOpenChange={(open) => setIsOpen(open)}>
|
|
45
|
+
<PopoverTrigger asChild>
|
|
46
|
+
<button
|
|
47
|
+
{...props}
|
|
48
|
+
data-theme={theme}
|
|
49
|
+
className={cn(profileItemStyles({ selected }), className)}
|
|
50
|
+
onPointerDown={(e: React.PointerEvent<HTMLButtonElement>) => {
|
|
51
|
+
props.onPointerDown && props.onPointerDown(e);
|
|
52
|
+
setDropdownWidth(e.currentTarget.offsetWidth);
|
|
53
|
+
}}
|
|
54
|
+
>
|
|
55
|
+
<div className="flex items-center gap-2">
|
|
56
|
+
<div className="flex items-center">
|
|
57
|
+
<span className="h-[28px] w-[2px] bg-transparent group-hover:bg-[#9748FF] group-hover:mr-[6px] transition-all ease-in-out duration-150"></span>
|
|
58
|
+
<img className="w-[28px] h-[28px] rounded-full object-cover" src={icon} alt="" />
|
|
59
|
+
</div>
|
|
40
60
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<Popover onOpenChange={(open) => setIsOpen(open)} >
|
|
46
|
-
<PopoverTrigger asChild>
|
|
47
|
-
<button
|
|
48
|
-
{...props}
|
|
49
|
-
data-theme={theme}
|
|
50
|
-
className={cn(
|
|
51
|
-
profileItemStyles({ selected }),
|
|
52
|
-
className
|
|
53
|
-
)}
|
|
54
|
-
onPointerDown={(e: any) => {
|
|
55
|
-
props.onPointerDown && props.onPointerDown(e);
|
|
56
|
-
setDropdownWidth(e.currentTarget.offsetWidth);
|
|
57
|
-
}}
|
|
58
|
-
>
|
|
59
|
-
<div className="flex items-center gap-2">
|
|
60
|
-
<div className="flex items-center">
|
|
61
|
-
<span className="h-[28px] w-[2px] bg-transparent group-hover:bg-[#9748FF] group-hover:mr-[6px] transition-all ease-in-out duration-150"></span>
|
|
62
|
-
<img className="w-[28px] h-[28px] rounded-full object-cover" src={icon} alt="" />
|
|
63
|
-
</div>
|
|
61
|
+
<p className={cn("typography-body-medium-medium text-content-system-global-primary")}>
|
|
62
|
+
{label}
|
|
63
|
+
</p>
|
|
64
|
+
</div>
|
|
64
65
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
{popoverChildren}
|
|
85
|
-
</PopoverContent>
|
|
86
|
-
}
|
|
87
|
-
</Popover>
|
|
88
|
-
);
|
|
66
|
+
<i
|
|
67
|
+
className={cn(
|
|
68
|
+
"ri-arrow-down-s-line text-[18px] text-content-system-global-primary group-hover:text-[#9748FF] transition-all ease-in-out duration-150",
|
|
69
|
+
{ "rotate-180": isOpen && popoverChildren },
|
|
70
|
+
)}
|
|
71
|
+
></i>
|
|
72
|
+
</button>
|
|
73
|
+
</PopoverTrigger>
|
|
74
|
+
{popoverChildren && (
|
|
75
|
+
<PopoverContent
|
|
76
|
+
overlayBlur={overlayBlur}
|
|
77
|
+
style={{ width: `${dropdownWidth}px` }}
|
|
78
|
+
theme={theme}
|
|
79
|
+
>
|
|
80
|
+
{popoverChildren}
|
|
81
|
+
</PopoverContent>
|
|
82
|
+
)}
|
|
83
|
+
</Popover>
|
|
84
|
+
);
|
|
89
85
|
};
|
|
90
|
-
|
|
@@ -9,11 +9,7 @@ const RadioGroup = React.forwardRef<
|
|
|
9
9
|
React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>
|
|
10
10
|
>(({ className, ...props }, ref) => {
|
|
11
11
|
return (
|
|
12
|
-
<RadioGroupPrimitive.Root
|
|
13
|
-
className={cn("grid gap-0.5", className)}
|
|
14
|
-
{...props}
|
|
15
|
-
ref={ref}
|
|
16
|
-
/>
|
|
12
|
+
<RadioGroupPrimitive.Root className={cn("grid gap-0.5", className)} {...props} ref={ref} />
|
|
17
13
|
);
|
|
18
14
|
});
|
|
19
15
|
RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
|
|
@@ -3,7 +3,6 @@ import { cn } from "../utils/cn";
|
|
|
3
3
|
import { Radio } from "./Radio";
|
|
4
4
|
import { Card, CardContent, CardDescription, CardHeader } from "./Card";
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
interface Props extends Omit<React.ComponentProps<typeof Radio>, "size" | "value"> {
|
|
8
7
|
headerLabel?: ReactNode;
|
|
9
8
|
id: string;
|
|
@@ -15,10 +14,7 @@ interface Props extends Omit<React.ComponentProps<typeof Radio>, "size" | "value
|
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
export const RadioCard = forwardRef<HTMLInputElement, Props>(
|
|
18
|
-
(
|
|
19
|
-
{ headerLabel, description, disabled, className, id, children, theme, value, ...props },
|
|
20
|
-
ref
|
|
21
|
-
) => {
|
|
17
|
+
({ headerLabel, description, disabled, className, id, children, theme, value, ...props }) => {
|
|
22
18
|
return (
|
|
23
19
|
<Card
|
|
24
20
|
data-theme={theme}
|
|
@@ -31,37 +27,22 @@ export const RadioCard = forwardRef<HTMLInputElement, Props>(
|
|
|
31
27
|
disabled && "!bg-background-presentation-action-disabled",
|
|
32
28
|
disabled && "cursor-not-allowed",
|
|
33
29
|
disabled && "hover:border-border-presentation-global-primary",
|
|
34
|
-
className
|
|
30
|
+
className,
|
|
35
31
|
)}
|
|
36
32
|
>
|
|
37
|
-
<section
|
|
38
|
-
|
|
39
|
-
>
|
|
40
|
-
<Radio
|
|
41
|
-
{...props}
|
|
42
|
-
value={value}
|
|
43
|
-
size="M"
|
|
44
|
-
id={id}
|
|
45
|
-
disabled={disabled}
|
|
46
|
-
/>
|
|
33
|
+
<section className={"absolute top-0 left-0 w-full p-[10px] flex justify-end"}>
|
|
34
|
+
<Radio {...props} value={value} size="M" id={id} disabled={disabled} />
|
|
47
35
|
</section>
|
|
48
36
|
|
|
49
|
-
<CardHeader
|
|
50
|
-
{headerLabel}
|
|
51
|
-
</CardHeader>
|
|
37
|
+
<CardHeader>{headerLabel}</CardHeader>
|
|
52
38
|
|
|
53
|
-
<CardContent
|
|
54
|
-
{description &&
|
|
55
|
-
<CardDescription >
|
|
56
|
-
{description}
|
|
57
|
-
</CardDescription>
|
|
58
|
-
)}
|
|
39
|
+
<CardContent>
|
|
40
|
+
{description && <CardDescription>{description}</CardDescription>}
|
|
59
41
|
{children}
|
|
60
42
|
</CardContent>
|
|
61
43
|
</Card>
|
|
62
44
|
);
|
|
63
|
-
}
|
|
45
|
+
},
|
|
64
46
|
);
|
|
65
47
|
|
|
66
|
-
|
|
67
|
-
RadioCard.displayName = "RadioCard"
|
|
48
|
+
RadioCard.displayName = "RadioCard";
|
|
@@ -1,52 +1,54 @@
|
|
|
1
|
-
"use client"
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
5
5
|
|
|
6
|
-
import { cn } from "../utils/cn"
|
|
6
|
+
import { cn } from "../utils/cn";
|
|
7
7
|
|
|
8
8
|
const ScrollArea = React.forwardRef<
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
React.ElementRef<typeof ScrollAreaPrimitive.Root>,
|
|
10
|
+
React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
|
|
11
11
|
>(({ className, children, ...props }, ref) => (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
12
|
+
<ScrollAreaPrimitive.Root
|
|
13
|
+
ref={ref}
|
|
14
|
+
className={cn(
|
|
15
|
+
[
|
|
16
|
+
"relative overflow-hidden",
|
|
17
|
+
"border-border-presentation-global-primary",
|
|
18
|
+
"bg-background-presentation-form-base",
|
|
19
|
+
"shadow-[0px_0px_10px_0px_rgba(0,0,0,0.4),0px_4px_4px_0px_rgba(0,0,0,0.2)]",
|
|
20
|
+
],
|
|
21
|
+
className,
|
|
22
|
+
)}
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
<ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
|
|
26
|
+
{children}
|
|
27
|
+
</ScrollAreaPrimitive.Viewport>
|
|
28
|
+
<ScrollBar />
|
|
29
|
+
<ScrollAreaPrimitive.Corner />
|
|
30
|
+
</ScrollAreaPrimitive.Root>
|
|
31
|
+
));
|
|
32
|
+
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
|
|
29
33
|
|
|
30
34
|
const ScrollBar = React.forwardRef<
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
|
|
36
|
+
React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
|
|
33
37
|
>(({ className, orientation = "vertical", ...props }, ref) => (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
))
|
|
50
|
-
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
|
|
38
|
+
<ScrollAreaPrimitive.ScrollAreaScrollbar
|
|
39
|
+
ref={ref}
|
|
40
|
+
orientation={orientation}
|
|
41
|
+
className={cn(
|
|
42
|
+
"flex touch-none select-none transition-colors",
|
|
43
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
|
|
44
|
+
orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
|
|
45
|
+
className,
|
|
46
|
+
)}
|
|
47
|
+
{...props}
|
|
48
|
+
>
|
|
49
|
+
<ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
|
|
50
|
+
</ScrollAreaPrimitive.ScrollAreaScrollbar>
|
|
51
|
+
));
|
|
52
|
+
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
|
|
51
53
|
|
|
52
|
-
export { ScrollArea, ScrollBar }
|
|
54
|
+
export { ScrollArea, ScrollBar };
|
|
@@ -2,51 +2,61 @@ import { forwardRef, ReactNode } from "react";
|
|
|
2
2
|
import { Props, InputField } from "./InputField";
|
|
3
3
|
|
|
4
4
|
interface SearchProps extends Props {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
Searchplaceholder?: ReactNode;
|
|
6
|
+
secondaryPlaceholder?: ReactNode;
|
|
7
|
+
childrenSide?: ReactNode;
|
|
8
8
|
}
|
|
9
9
|
// Use InputField types in the SearchInput component
|
|
10
10
|
export const SearchField = forwardRef<HTMLInputElement, SearchProps>(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
11
|
+
({ Searchplaceholder, secondaryPlaceholder, childrenSide, ...props }, forwardedRef) => {
|
|
12
|
+
return (
|
|
13
|
+
<div className="mb-[10px] w-full h-fit justify-center items-center rounded-[12px] p-[3px] bg-[rgba(106,112,144,0.60)] shadow-[0px_0px_18px_0px_rgba(0,0,0,0.75)] backdrop-blur-[21px]">
|
|
14
|
+
<InputField
|
|
15
|
+
{...props}
|
|
16
|
+
ref={forwardedRef}
|
|
17
|
+
type="text"
|
|
18
|
+
variant="SystemStyle"
|
|
19
|
+
size="M"
|
|
20
|
+
className="h-[54px] rounded-[9px] p-[15px] border-border-system-global-primary bg-[rgba(0,0,0,0.60)]"
|
|
21
|
+
icon={
|
|
22
|
+
<SearchInputPlaceholder
|
|
23
|
+
value={props.value}
|
|
24
|
+
secondaryPlaceholder={secondaryPlaceholder}
|
|
25
|
+
Searchplaceholder={Searchplaceholder}
|
|
26
|
+
/>
|
|
27
|
+
}
|
|
28
|
+
childrenSide={childrenSide}
|
|
29
|
+
/>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
},
|
|
31
33
|
);
|
|
32
34
|
|
|
33
35
|
SearchField.displayName = " SearchField"; // Set displayName for debugging
|
|
34
36
|
|
|
37
|
+
function SearchInputPlaceholder({
|
|
38
|
+
Searchplaceholder,
|
|
39
|
+
secondaryPlaceholder,
|
|
40
|
+
value,
|
|
41
|
+
}: {
|
|
42
|
+
Searchplaceholder?: ReactNode;
|
|
43
|
+
secondaryPlaceholder?: ReactNode;
|
|
44
|
+
value?: string | number | readonly string[];
|
|
45
|
+
}) {
|
|
46
|
+
return (
|
|
47
|
+
<div className="flex gap-[10px] justify-center items-center ">
|
|
48
|
+
<i className="ri-search-2-line text-[24px] text-[#E5E5E5]"></i>
|
|
35
49
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<p className="text-content-system-global-primary typography-headers-medium-regular leading-none opacity-[0.8]">{Searchplaceholder}</p>
|
|
45
|
-
<p className="text-content-system-global-primary typography-body-medium-medium leading-none opacity-30 mix-blend-luminosity mt-[2px]">{secondaryPlaceholder}</p>
|
|
46
|
-
</div>
|
|
47
|
-
) : null
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
+
{value == "" ? (
|
|
51
|
+
<div className="flex gap-[5px] justify-center items-center ">
|
|
52
|
+
<p className="text-content-system-global-primary typography-headers-medium-regular leading-none opacity-[0.8]">
|
|
53
|
+
{Searchplaceholder}
|
|
54
|
+
</p>
|
|
55
|
+
<p className="text-content-system-global-primary typography-body-medium-medium leading-none opacity-30 mix-blend-luminosity mt-[2px]">
|
|
56
|
+
{secondaryPlaceholder}
|
|
57
|
+
</p>
|
|
50
58
|
</div>
|
|
51
|
-
|
|
52
|
-
|
|
59
|
+
) : null}
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
@@ -91,7 +91,7 @@ const menuContentStyles = cva(
|
|
|
91
91
|
},
|
|
92
92
|
},
|
|
93
93
|
defaultVariants: { variant: "PresentationStyle" },
|
|
94
|
-
}
|
|
94
|
+
},
|
|
95
95
|
);
|
|
96
96
|
|
|
97
97
|
export function SearchableSelect({
|
|
@@ -123,10 +123,7 @@ export function SearchableSelect({
|
|
|
123
123
|
|
|
124
124
|
const groupRef = useClickOutside<HTMLDivElement>((e) => {
|
|
125
125
|
const target = e?.target as Node;
|
|
126
|
-
if (
|
|
127
|
-
!groupRef.current?.contains(target) &&
|
|
128
|
-
!popoverContentRef.current?.contains(target)
|
|
129
|
-
) {
|
|
126
|
+
if (!groupRef.current?.contains(target) && !popoverContentRef.current?.contains(target)) {
|
|
130
127
|
setOpen(false);
|
|
131
128
|
}
|
|
132
129
|
});
|
|
@@ -168,7 +165,7 @@ export function SearchableSelect({
|
|
|
168
165
|
};
|
|
169
166
|
|
|
170
167
|
// Solid value: search text while typing, otherwise the selected label.
|
|
171
|
-
const displayValue = searching ? search : selectedOption?.label ?? "";
|
|
168
|
+
const displayValue = searching ? search : (selectedOption?.label ?? "");
|
|
172
169
|
|
|
173
170
|
return (
|
|
174
171
|
<Popover open={open}>
|
|
@@ -222,13 +219,13 @@ export function SearchableSelect({
|
|
|
222
219
|
}}
|
|
223
220
|
className={cn(
|
|
224
221
|
"shrink-0 h-[32px] w-[32px] rounded-[4px]",
|
|
225
|
-
open && "bg-background-presentation-action-hover text-white"
|
|
222
|
+
open && "bg-background-presentation-action-hover text-white",
|
|
226
223
|
)}
|
|
227
224
|
>
|
|
228
225
|
<i
|
|
229
226
|
className={cn(
|
|
230
|
-
"ri-arrow-down-s-line text-[
|
|
231
|
-
open && "rotate-180"
|
|
227
|
+
"ri-arrow-down-s-line text-[20px] transition-all duration-100 ease-in-out",
|
|
228
|
+
open && "rotate-180",
|
|
232
229
|
)}
|
|
233
230
|
/>
|
|
234
231
|
</Button>
|
|
@@ -251,54 +248,51 @@ export function SearchableSelect({
|
|
|
251
248
|
<div
|
|
252
249
|
ref={scrollRef}
|
|
253
250
|
onScroll={handleScroll}
|
|
254
|
-
className="overflow-y-auto overflow-x-hidden scrollbar-hide"
|
|
251
|
+
className="overflow-y-auto overflow-x-hidden rounded-[10px] scrollbar-hide"
|
|
255
252
|
style={{ maxHeight: maxVisibleItems * ROW_HEIGHT }}
|
|
256
253
|
>
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
)}
|
|
274
|
-
>
|
|
275
|
-
<div>
|
|
276
|
-
{option.icon}
|
|
277
|
-
<span className="flex-1 text-start">{option.label}</span>
|
|
278
|
-
{isSelected && (
|
|
279
|
-
<i className="ri-check-line text-[16px] shrink-0" />
|
|
254
|
+
{filteredOptions.length > 0 && (
|
|
255
|
+
// Boxed group container — matches the DropdownMenu's auto-grouped look.
|
|
256
|
+
<div className="flex flex-col gap-[1px] rounded-[10px] overflow-hidden">
|
|
257
|
+
{filteredOptions.map((option) => {
|
|
258
|
+
const isSelected = option.value === value;
|
|
259
|
+
return (
|
|
260
|
+
// Same structure as DropdownMenuItem: MenuItemStyles on the
|
|
261
|
+
// element + a single inner <div> the styles target via [&>div].
|
|
262
|
+
<button
|
|
263
|
+
type="button"
|
|
264
|
+
key={option.value}
|
|
265
|
+
onClick={() => handleSelect(option)}
|
|
266
|
+
data-highlighted={isSelected ? "" : undefined}
|
|
267
|
+
className={cn(
|
|
268
|
+
MenuItemStyles({ variant: "Default", size: "M" }),
|
|
269
|
+
"shrink-0", // keep full row height; the list scrolls instead of squishing
|
|
280
270
|
)}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
</div>
|
|
293
|
-
)}
|
|
271
|
+
>
|
|
272
|
+
<div>
|
|
273
|
+
{option.icon}
|
|
274
|
+
<span className="flex-1 text-start">{option.label}</span>
|
|
275
|
+
{isSelected && <i className="ri-check-line text-[16px] shrink-0" />}
|
|
276
|
+
</div>
|
|
277
|
+
</button>
|
|
278
|
+
);
|
|
279
|
+
})}
|
|
280
|
+
</div>
|
|
281
|
+
)}
|
|
294
282
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
283
|
+
{/* Empty state — only when nothing is loading. */}
|
|
284
|
+
{filteredOptions.length === 0 && !loading && (
|
|
285
|
+
<div className="px-3 py-2 typography-body-small-regular text-white-alpha-75">
|
|
286
|
+
No results found
|
|
287
|
+
</div>
|
|
288
|
+
)}
|
|
301
289
|
|
|
290
|
+
{/* Loading row (initial load or fetching the next page). */}
|
|
291
|
+
{loading && (
|
|
292
|
+
<div className="flex items-center justify-center py-2">
|
|
293
|
+
<LoadingIcon size="M" />
|
|
294
|
+
</div>
|
|
295
|
+
)}
|
|
302
296
|
</div>
|
|
303
297
|
</PopoverContent>
|
|
304
298
|
</Popover>
|