Skip to content

Commit 0febb90

Browse files
committed
Add radio group component
1 parent e6cf0f4 commit 0febb90

File tree

5 files changed

+126
-0
lines changed

5 files changed

+126
-0
lines changed

packages/base/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"@radix-ui/react-checkbox": "^1.3.2",
6868
"@radix-ui/react-dropdown-menu": "^2.1.15",
6969
"@radix-ui/react-popover": "^1.1.14",
70+
"@radix-ui/react-radio-group": "^1.3.8",
7071
"@radix-ui/react-slot": "^1.2.3",
7172
"@radix-ui/react-tabs": "^1.1.12",
7273
"@radix-ui/react-toggle-group": "^1.1.10",
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
2+
import { CircleIcon } from 'lucide-react';
3+
import * as React from 'react';
4+
5+
import { cn } from './utils';
6+
7+
function RadioGroup({
8+
className,
9+
...props
10+
}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {
11+
return (
12+
<RadioGroupPrimitive.Root
13+
data-slot="radio-group"
14+
className={cn('jgis-radio-group', className)}
15+
{...props}
16+
/>
17+
);
18+
}
19+
20+
function RadioGroupItem({
21+
className,
22+
...props
23+
}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {
24+
return (
25+
<RadioGroupPrimitive.Item
26+
data-slot="radio-group-item"
27+
className={cn('jgis-radio-group-item', className)}
28+
{...props}
29+
>
30+
<RadioGroupPrimitive.Indicator
31+
data-slot="radio-group-indicator"
32+
className="jgis-radio-group-indicator"
33+
>
34+
<CircleIcon className="jgis-radio-group-indicator-icon" />
35+
</RadioGroupPrimitive.Indicator>
36+
</RadioGroupPrimitive.Item>
37+
);
38+
}
39+
40+
export { RadioGroup, RadioGroupItem };

packages/base/style/base.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
@import url('./shared/dropdownMenu.css');
2121
@import url('./shared/badge.css');
2222
@import url('./shared/checkbox.css');
23+
@import url('./shared/radioGroup.css');
2324

2425
.errors {
2526
color: var(--jp-warn-color0);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
.jgis-radio-group {
2+
display: grid;
3+
gap: 0.75rem;
4+
}
5+
6+
.jgis-radio-group-item {
7+
aspect-ratio: 1 / 1;
8+
width: 1rem;
9+
height: 1rem;
10+
flex-shrink: 0;
11+
border-radius: 9999px !important;
12+
border: 1px solid var(--jp-border-color0);
13+
background-color: var(--jp-layout-color2);
14+
color: var(--jp-ui-font-color0);
15+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
16+
transition:
17+
color 0.15s ease-in-out,
18+
box-shadow 0.15s ease-in-out;
19+
outline: none;
20+
cursor: pointer;
21+
}
22+
23+
.jgis-radio-group-item:focus-visible {
24+
border-color: var(--jp-ui-font-color0);
25+
box-shadow: 0 0 0 3px
26+
color-mix(in srgb, var(--jp-ui-font-color0), transparent 50%);
27+
}
28+
29+
.jgis-radio-group-item[aria-invalid='true'] {
30+
border-color: var(--jp-error-color0, #dc2626);
31+
box-shadow: 0 0 0 3px
32+
color-mix(in srgb, var(--jp-error-color0, #dc2626), transparent 80%);
33+
}
34+
35+
.jgis-radio-group-item:disabled {
36+
cursor: not-allowed;
37+
opacity: 0.5;
38+
}
39+
40+
.jgis-radio-group-indicator {
41+
position: relative;
42+
display: flex;
43+
align-items: center;
44+
justify-content: center;
45+
}
46+
47+
.jgis-radio-group-indicator-icon {
48+
position: absolute;
49+
top: 50%;
50+
left: 50%;
51+
width: 0.5rem;
52+
height: 0.5rem;
53+
transform: translate(-50%, -50%);
54+
fill: currentColor;
55+
}

yarn.lock

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,7 @@ __metadata:
975975
"@radix-ui/react-checkbox": ^1.3.2
976976
"@radix-ui/react-dropdown-menu": ^2.1.15
977977
"@radix-ui/react-popover": ^1.1.14
978+
"@radix-ui/react-radio-group": ^1.3.8
978979
"@radix-ui/react-slot": ^1.2.3
979980
"@radix-ui/react-tabs": ^1.1.12
980981
"@radix-ui/react-toggle-group": ^1.1.10
@@ -3226,6 +3227,34 @@ __metadata:
32263227
languageName: node
32273228
linkType: hard
32283229

3230+
"@radix-ui/react-radio-group@npm:^1.3.8":
3231+
version: 1.3.8
3232+
resolution: "@radix-ui/react-radio-group@npm:1.3.8"
3233+
dependencies:
3234+
"@radix-ui/primitive": 1.1.3
3235+
"@radix-ui/react-compose-refs": 1.1.2
3236+
"@radix-ui/react-context": 1.1.2
3237+
"@radix-ui/react-direction": 1.1.1
3238+
"@radix-ui/react-presence": 1.1.5
3239+
"@radix-ui/react-primitive": 2.1.3
3240+
"@radix-ui/react-roving-focus": 1.1.11
3241+
"@radix-ui/react-use-controllable-state": 1.2.2
3242+
"@radix-ui/react-use-previous": 1.1.1
3243+
"@radix-ui/react-use-size": 1.1.1
3244+
peerDependencies:
3245+
"@types/react": "*"
3246+
"@types/react-dom": "*"
3247+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
3248+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
3249+
peerDependenciesMeta:
3250+
"@types/react":
3251+
optional: true
3252+
"@types/react-dom":
3253+
optional: true
3254+
checksum: 5e35970ec8965f398f15ff9b7d52c74125119d4af303fe7cd0c91f95d00692e4630d3db01e068eba833669dfb813a14b06cd80587acde028bd4cd747cb2aff41
3255+
languageName: node
3256+
linkType: hard
3257+
32293258
"@radix-ui/react-roving-focus@npm:1.1.11":
32303259
version: 1.1.11
32313260
resolution: "@radix-ui/react-roving-focus@npm:1.1.11"

0 commit comments

Comments
 (0)