Skip to content

Commit 40cfeaf

Browse files
kaspermrozikovic
andauthored
React SDK: Fix Radix primitives (#312)
* Cleanup Radix dependencies * Add changeset * Revert the radix select update * Adjust select implementation * Revert to v1 * Use Radix v2 * Fix org switcher fallback * Remove beta classname * Add a comment to explain the change * Fix chevron rotate issue * Include border in label position --------- Co-authored-by: ikovic <kovic.ivan@gmail.com>
1 parent 30ae482 commit 40cfeaf

File tree

7 files changed

+121
-137
lines changed

7 files changed

+121
-137
lines changed

.changeset/rare-pans-sneeze.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@slashid/react-primitives": patch
3+
"@slashid/react": patch
4+
---
5+
6+
Cleanup Radix dependencies

packages/react-primitives/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"dependencies": {
6363
"@radix-ui/react-accordion": "^1.1.2",
6464
"@radix-ui/react-dialog": "^1.0.4",
65-
"@radix-ui/react-select": "^1.1.2",
65+
"@radix-ui/react-select": "^2.1.3",
6666
"@radix-ui/react-switch": "^1.0.3",
6767
"@radix-ui/react-tabs": "^1.0.1",
6868
"@vanilla-extract/css": "^1.9.2",

packages/react-primitives/src/components/dropdown/dropdown.css.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import { publicVariables, theme } from "../../theme/theme.css";
33

44
export const trigger = style({
55
display: "flex",
6-
alignItems: "flex-start",
7-
justifyContent: "center",
8-
flexDirection: "column",
6+
alignItems: "end",
7+
justifyContent: "space-between",
98
width: "100%",
109
minWidth: theme.input.minWidth,
1110
height: theme.input.height,
@@ -38,6 +37,9 @@ export const label = style({
3837
fontSize: theme.font.size.xs,
3938
fontWeight: theme.font.weight.semibold,
4039
color: publicVariables.input.label.color,
40+
position: "absolute",
41+
top: 12,
42+
left: 17,
4143
});
4244

4345
export const input = style({
@@ -83,13 +85,15 @@ export const item = style({
8385
},
8486
});
8587

86-
export const icon = style({
88+
export const iconWrapper = style({
8789
position: "absolute",
8890
right: "16px",
89-
zIndex: 0,
91+
top: "22px",
92+
});
9093

94+
export const icon = style({
9195
selectors: {
92-
[`${trigger}[data-state='open'] > &`]: {
96+
[`${trigger}[data-state='open'] &`]: {
9397
transform: "rotate(180deg)",
9498
},
9599
},
@@ -100,3 +104,7 @@ export const selectedIcon = style({
100104
marginLeft: "auto",
101105
justifySelf: "flex-end",
102106
});
107+
108+
export const wrapper = style({
109+
position: "relative",
110+
});

packages/react-primitives/src/components/dropdown/index.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Props = {
2424
type?: "text" | "email" | "tel";
2525
items: Item[];
2626
defaultValue?: string;
27+
placeholder?: string;
2728
onChange: (value: string) => void;
2829
disabled?: boolean;
2930
contentProps?: Select.SelectContentProps;
@@ -33,6 +34,7 @@ export const Dropdown: React.FC<Props> = ({
3334
label,
3435
items,
3536
defaultValue,
37+
placeholder,
3638
onChange,
3739
className,
3840
contentProps,
@@ -48,7 +50,15 @@ export const Dropdown: React.FC<Props> = ({
4850
);
4951

5052
return (
51-
<div className="sid-dropdown">
53+
<div className={clsx("sid-dropdown", styles.wrapper)}>
54+
{/**
55+
* The label needs to live outside of the Select.Root, this ensures
56+
* correct Select behaviour in Safari (iOS). It's still positioned absolutely,
57+
* so it appears as part of the Select in the UI.
58+
*/}
59+
<label className={clsx("sid-dropdown__trigger__label", styles.label)}>
60+
{label}
61+
</label>
5262
<Select.Root
5363
disabled={disabled}
5464
onValueChange={onSelectCallback}
@@ -57,15 +67,14 @@ export const Dropdown: React.FC<Props> = ({
5767
<Select.Trigger
5868
className={clsx("sid-dropdown__trigger", styles.trigger, className)}
5969
>
60-
<label className={clsx("sid-dropdown__trigger__label", styles.label)}>
61-
{label}
62-
</label>
6370
<div className={clsx("sid-dropdown__trigger__input", styles.input)}>
64-
<Select.Value />
71+
<Select.Value placeholder={placeholder} />
6572
</div>
66-
<ChevronDown
67-
className={clsx("sid-dropdown__trigger__icon", styles.icon)}
68-
/>
73+
<Select.Icon className={styles.iconWrapper}>
74+
<ChevronDown
75+
className={clsx("sid-dropdown__trigger__icon", styles.icon)}
76+
/>
77+
</Select.Icon>
6978
</Select.Trigger>
7079

7180
<Select.Content

packages/react/package.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,6 @@
5050
"publish:yalc": "node ./yalc.next.js && pnpm build && yalc publish"
5151
},
5252
"dependencies": {
53-
"@radix-ui/react-accordion": "^1.1.2",
54-
"@radix-ui/react-dialog": "^1.0.4",
55-
"@radix-ui/react-select": "^2.1.2",
56-
"@radix-ui/react-switch": "^1.0.3",
57-
"@radix-ui/react-tabs": "^1.0.1",
5853
"@vanilla-extract/css": "^1.9.2",
5954
"@vanilla-extract/dynamic": "^2.0.3",
6055
"@vanilla-extract/recipes": "^0.3.0",

packages/react/src/components/organization-switcher/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ const DefaultFallback = () => {
2020

2121
return (
2222
<Dropdown
23-
defaultValue={""}
23+
defaultValue={"-"}
2424
disabled={true}
2525
className={className}
26-
items={[{ label: "-", value: "" }]}
26+
items={[{ label: "-", value: "-" }]}
2727
onChange={noop}
2828
label={text["org.switcher.label"]}
2929
/>

0 commit comments

Comments
 (0)