A design system in a box. hip-ui.tngl.io/docs/introduction
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

submenu

+428 -50
+22 -9
apps/example/src/components/KitchenSink.tsx
··· 53 53 import { Select, SelectItem } from "./select"; 54 54 import { ToggleButton } from "./toggle-button"; 55 55 import { ToggleButtonGroup } from "./toggle-button-group"; 56 - import { Menu, MenuItem } from "./menu"; 56 + import { 57 + Menu, 58 + MenuItem, 59 + MenuSection, 60 + MenuSectionHeader, 61 + MenuSeparator, 62 + SubMenu, 63 + } from "./menu"; 57 64 import { 58 65 ListBoxSection, 59 66 ListBoxSectionHeader, ··· 479 486 </IconButton> 480 487 } 481 488 > 482 - <ListBoxSection> 483 - <ListBoxSectionHeader>Menu Section Header</ListBoxSectionHeader> 489 + <MenuSection> 490 + <MenuSectionHeader>Menu Section Header</MenuSectionHeader> 484 491 <MenuItem>Menu Item 1</MenuItem> 485 492 <MenuItem>Menu Item 2</MenuItem> 486 493 <MenuItem>Menu Item 3</MenuItem> 487 - </ListBoxSection> 488 - <ListBoxSeparator /> 489 - <ListBoxSection> 490 - <ListBoxSectionHeader>Menu Section 2</ListBoxSectionHeader> 494 + </MenuSection> 495 + <MenuSeparator /> 496 + <MenuSection> 497 + <MenuSectionHeader>Menu Section 2</MenuSectionHeader> 491 498 <MenuItem>Menu Item 4</MenuItem> 492 499 <MenuItem>Menu Item 5</MenuItem> 493 - <MenuItem>Menu Item 6</MenuItem> 494 - </ListBoxSection> 500 + <SubMenu trigger={<MenuItem>Menu Item 6</MenuItem>}> 501 + <MenuItem>Menu Item 7</MenuItem> 502 + <MenuItem>Menu Item 8</MenuItem> 503 + <MenuItem>Menu Item 9</MenuItem> 504 + </SubMenu> 505 + </MenuSection> 495 506 </Menu> 496 507 </Flex> 497 508 ); 498 509 } 499 510 500 511 export function KitchenSink() { 512 + return <MenuExample />; 513 + 501 514 return ( 502 515 <Flex 503 516 direction="column"
+1 -2
apps/example/src/components/listbox/index.tsx
··· 123 123 export function ListBoxItem({ style, children, ...props }: ListBoxItemProps) { 124 124 const size = useContext(SizeContext); 125 125 126 - console.log("size", { size }); 127 126 return ( 128 127 <AriaListBoxItem 129 128 {...props} ··· 160 159 } 161 160 162 161 export function ListBoxSeparator({ style, ...props }: ListBoxSeparatorProps) { 163 - return <Separator {...props} style={styles.separator} />; 162 + return <Separator {...props} style={[styles.separator, style]} />; 164 163 } 165 164 166 165 export interface ListBoxSectionHeaderProps
+173 -17
apps/example/src/components/menu/index.tsx
··· 2 2 MenuTriggerProps, 3 3 MenuTrigger, 4 4 Popover, 5 - ListBoxSectionProps, 6 - ListBoxSection, 5 + SubmenuTriggerProps, 6 + Menu as AriaMenu, 7 + MenuProps as AriaMenuProps, 8 + MenuSection as AriaMenuSection, 9 + MenuSectionProps as AriaMenuSectionProps, 10 + MenuItem as AriaMenuItem, 11 + MenuItemProps as AriaMenuItemProps, 12 + SubmenuTrigger, 13 + PopoverProps, 7 14 } from "react-aria-components"; 8 15 import * as stylex from "@stylexjs/stylex"; 9 16 import { spacing } from "../theme/spacing.stylex"; ··· 11 18 import { radius } from "../theme/radius.stylex"; 12 19 import { Size } from "../types"; 13 20 import { 14 - ListBox, 15 - ListBoxItem, 16 - ListBoxItemProps, 17 21 ListBoxSectionHeaderProps, 18 22 ListBoxSectionHeader, 19 23 ListBoxSeparator, 20 24 ListBoxSeparatorProps, 21 25 } from "../listbox"; 22 26 import { SizeContext } from "../context"; 27 + import { fontWeight, typeramp } from "../theme/typography.stylex"; 28 + import { useContext } from "react"; 29 + import { Check, ChevronRight } from "lucide-react"; 30 + import { plum, slate } from "../theme/colors.stylex"; 23 31 24 32 const styles = stylex.create({ 25 33 popover: { 26 34 borderRadius: radius["md"], 27 35 minWidth: spacing["40"], 36 + outline: "none", 28 37 overflow: "auto", 38 + paddingBottom: spacing["1"], 39 + paddingTop: spacing["1"], 40 + width: "var(--trigger-width)", 41 + }, 42 + menu: { 29 43 outline: "none", 30 - width: "var(--trigger-width)", 31 - paddingTop: spacing["1"], 32 - paddingBottom: spacing["1"], 44 + }, 45 + section: {}, 46 + item: { 47 + display: "flex", 48 + userSelect: "none", 49 + 50 + boxSizing: "border-box", 51 + fontWeight: fontWeight["medium"], 52 + outline: { 53 + default: "none", 54 + ":focus": "none", 55 + }, 56 + padding: spacing["1"], 57 + }, 58 + sm: { 59 + height: spacing["9"], 60 + }, 61 + md: { 62 + height: spacing["9"], 63 + }, 64 + lg: { 65 + height: spacing["11"], 66 + }, 67 + itemInner: { 68 + alignItems: "center", 69 + backgroundColor: { 70 + default: "transparent", 71 + [":is(:hover > *)"]: slate[4], 72 + [":is(:active > *)"]: slate[5], 73 + }, 74 + borderRadius: radius["md"], 75 + boxSizing: "border-box", 76 + display: "flex", 77 + flexGrow: 1, 78 + gap: spacing["2"], 79 + justifyContent: "space-between", 80 + paddingLeft: spacing["2"], 81 + paddingRight: spacing["2"], 82 + transitionDuration: "100ms", 83 + transitionProperty: "background-color", 84 + transitionTimingFunction: "ease-in-out", 85 + }, 86 + check: { 87 + color: plum[9], 33 88 }, 34 89 }); 35 90 36 91 export interface MenuProps<T extends object> 37 - extends Omit<MenuTriggerProps, "trigger" | "children"> { 92 + extends Omit<MenuTriggerProps, "trigger" | "children">, 93 + Omit<AriaMenuProps<T>, "children" | "className" | "style">, 94 + Pick< 95 + PopoverProps, 96 + | "shouldCloseOnInteractOutside" 97 + | "shouldFlip" 98 + | "shouldUpdatePosition" 99 + | "placement" 100 + > { 38 101 trigger: React.ReactNode; 39 102 items?: Iterable<T>; 40 103 children: React.ReactNode | ((item: T) => React.ReactNode); ··· 43 106 44 107 export function Menu<T extends object>({ 45 108 trigger, 46 - children, 47 - items, 48 109 size = "md", 110 + defaultOpen, 111 + isOpen, 112 + onOpenChange, 113 + shouldCloseOnInteractOutside, 114 + shouldFlip, 115 + shouldUpdatePosition, 116 + placement, 49 117 ...props 50 118 }: MenuProps<T>) { 51 119 return ( 52 120 <SizeContext.Provider value={size}> 53 - <MenuTrigger {...props}> 121 + <MenuTrigger 122 + defaultOpen={defaultOpen} 123 + isOpen={isOpen} 124 + onOpenChange={onOpenChange} 125 + > 54 126 {trigger} 55 127 <Popover 128 + containerPadding={8} 129 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 130 + shouldFlip={shouldFlip} 131 + shouldUpdatePosition={shouldUpdatePosition} 132 + placement={placement} 56 133 {...stylex.props( 57 134 styles.popover, 58 135 gray.bgSubtle, ··· 60 137 gray.border 61 138 )} 62 139 > 63 - <ListBox items={items}>{children}</ListBox> 140 + <AriaMenu {...props} {...stylex.props(styles.menu)} /> 64 141 </Popover> 65 142 </MenuTrigger> 66 143 </SizeContext.Provider> 67 144 ); 68 145 } 69 146 70 - export type MenuItemProps = ListBoxItemProps; 71 - export const MenuItem = ListBoxItem; 72 - export type MenuSectionProps<T extends object> = ListBoxSectionProps<T>; 73 - export const MenuSection = ListBoxSection; 147 + export interface SubMenuProps<T extends object> 148 + extends Omit<SubmenuTriggerProps, "trigger" | "children">, 149 + Omit<AriaMenuProps<T>, "children" | "className" | "style">, 150 + Pick< 151 + PopoverProps, 152 + | "shouldCloseOnInteractOutside" 153 + | "shouldFlip" 154 + | "shouldUpdatePosition" 155 + | "placement" 156 + > { 157 + trigger: React.ReactElement<MenuTriggerProps>; 158 + children: React.ReactNode | ((item: T) => React.ReactNode); 159 + items?: Iterable<T>; 160 + size?: Size; 161 + } 162 + 163 + export function SubMenu<T extends object>({ 164 + trigger, 165 + delay, 166 + shouldCloseOnInteractOutside, 167 + shouldFlip, 168 + shouldUpdatePosition, 169 + placement, 170 + ...props 171 + }: SubMenuProps<T>) { 172 + return ( 173 + <SubmenuTrigger delay={delay}> 174 + {trigger} 175 + <Popover 176 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 177 + shouldFlip={shouldFlip} 178 + shouldUpdatePosition={shouldUpdatePosition} 179 + placement={placement} 180 + containerPadding={8} 181 + offset={-8} 182 + {...stylex.props(styles.popover, gray.bgSubtle, gray.text, gray.border)} 183 + > 184 + <AriaMenu {...props} /> 185 + </Popover> 186 + </SubmenuTrigger> 187 + ); 188 + } 189 + 190 + export interface MenuSectionProps<T extends object> 191 + extends Omit<AriaMenuSectionProps<T>, "style" | "className"> { 192 + style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 193 + children: React.ReactNode; 194 + } 195 + 196 + export function MenuSection<T extends object>({ 197 + style, 198 + ...props 199 + }: MenuSectionProps<T>) { 200 + return ( 201 + <AriaMenuSection {...props} {...stylex.props(styles.section, style)} /> 202 + ); 203 + } 204 + 205 + export interface MenuItemProps 206 + extends Omit<AriaMenuItemProps, "style" | "className" | "children"> { 207 + style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 208 + children: React.ReactNode; 209 + } 210 + 211 + export function MenuItem({ style, children, ...props }: MenuItemProps) { 212 + const size = useContext(SizeContext); 213 + 214 + return ( 215 + <AriaMenuItem 216 + {...props} 217 + {...stylex.props(typeramp.label, styles.item, styles[size], style)} 218 + > 219 + {({ isSelected, hasSubmenu }) => ( 220 + <div {...stylex.props(styles.itemInner)}> 221 + {children} 222 + {isSelected && <Check size={16} {...stylex.props(styles.check)} />} 223 + {hasSubmenu && <ChevronRight size={16} />} 224 + </div> 225 + )} 226 + </AriaMenuItem> 227 + ); 228 + } 229 + 74 230 export type MenuSectionHeaderProps = ListBoxSectionHeaderProps; 75 231 export const MenuSectionHeader = ListBoxSectionHeader; 76 232 export type MenuSeparatorProps = ListBoxSeparatorProps;
+38 -4
apps/example/src/components/select/index.tsx
··· 3 3 Button, 4 4 Popover, 5 5 SelectValue, 6 + PopoverProps, 6 7 } from "react-aria-components"; 7 8 import { Select as AriaSelect } from "react-aria-components"; 8 9 import * as stylex from "@stylexjs/stylex"; 9 - import type { ValidationResult } from "react-aria-components"; 10 + import type { 11 + ListBoxSectionProps, 12 + ValidationResult, 13 + } from "react-aria-components"; 10 14 import { FieldError } from "react-aria-components"; 11 15 import { Description, Label } from "../label"; 12 16 import { ChevronDown } from "lucide-react"; ··· 16 20 import { radius } from "../theme/radius.stylex"; 17 21 import { fontSize, lineHeight } from "../theme/typography.stylex"; 18 22 import { Size } from "../types"; 19 - import { ListBox, ListBoxItem, ListBoxItemProps } from "../listbox"; 23 + import { 24 + ListBox, 25 + ListBoxItem, 26 + ListBoxItemProps, 27 + ListBoxSectionHeaderProps, 28 + ListBoxSectionHeader, 29 + ListBoxSeparatorProps, 30 + ListBoxSeparator, 31 + ListBoxSection, 32 + } from "../listbox"; 20 33 import { SizeContext } from "../context"; 21 34 22 35 const styles = stylex.create({ ··· 74 87 }); 75 88 76 89 export interface SelectProps<T extends object, M extends "single" | "multiple"> 77 - extends Omit<AriaSelectProps<T, M>, "children" | "style" | "className"> { 90 + extends Omit<AriaSelectProps<T, M>, "children" | "style" | "className">, 91 + Pick< 92 + PopoverProps, 93 + | "shouldCloseOnInteractOutside" 94 + | "shouldFlip" 95 + | "shouldUpdatePosition" 96 + | "placement" 97 + > { 78 98 style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 79 99 label?: string; 80 100 description?: string; ··· 95 115 items, 96 116 style, 97 117 size = "md", 118 + shouldCloseOnInteractOutside, 119 + shouldFlip, 120 + shouldUpdatePosition, 121 + placement, 98 122 ...props 99 123 }: SelectProps<T, M>) { 100 - console.log("size", size); 101 124 return ( 102 125 <SizeContext.Provider value={size}> 103 126 <AriaSelect {...props} {...stylex.props(styles.wrapper, style)}> ··· 111 134 {description && <Description size={size}>{description}</Description>} 112 135 <FieldError>{errorMessage}</FieldError> 113 136 <Popover 137 + containerPadding={8} 138 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 139 + shouldFlip={shouldFlip} 140 + shouldUpdatePosition={shouldUpdatePosition} 141 + placement={placement} 114 142 {...stylex.props( 115 143 styles.popover, 116 144 gray.bgSubtle, ··· 127 155 128 156 export type SelectItemProps = ListBoxItemProps; 129 157 export const SelectItem = ListBoxItem; 158 + export type SelectSectionProps<T extends object> = ListBoxSectionProps<T>; 159 + export const SelectSection = ListBoxSection; 160 + export type SelectSectionHeaderProps = ListBoxSectionHeaderProps; 161 + export const SelectSectionHeader = ListBoxSectionHeader; 162 + export type SelectSeparatorProps = ListBoxSeparatorProps; 163 + export const SelectSeparator = ListBoxSeparator;
+1 -2
packages/hip-ui/src/components/listbox/index.tsx
··· 123 123 export function ListBoxItem({ style, children, ...props }: ListBoxItemProps) { 124 124 const size = useContext(SizeContext); 125 125 126 - console.log("size", { size }); 127 126 return ( 128 127 <AriaListBoxItem 129 128 {...props} ··· 160 159 } 161 160 162 161 export function ListBoxSeparator({ style, ...props }: ListBoxSeparatorProps) { 163 - return <Separator {...props} style={styles.separator} />; 162 + return <Separator {...props} style={[styles.separator, style]} />; 164 163 } 165 164 166 165 export interface ListBoxSectionHeaderProps
+175 -15
packages/hip-ui/src/components/menu/index.tsx
··· 1 - import { MenuTriggerProps, MenuTrigger, Popover } from "react-aria-components"; 1 + import { 2 + MenuTriggerProps, 3 + MenuTrigger, 4 + Popover, 5 + SubmenuTriggerProps, 6 + Menu as AriaMenu, 7 + MenuProps as AriaMenuProps, 8 + MenuSection as AriaMenuSection, 9 + MenuSectionProps as AriaMenuSectionProps, 10 + MenuItem as AriaMenuItem, 11 + MenuItemProps as AriaMenuItemProps, 12 + SubmenuTrigger, 13 + PopoverProps, 14 + } from "react-aria-components"; 2 15 import * as stylex from "@stylexjs/stylex"; 3 16 import { spacing } from "../theme/spacing.stylex"; 4 17 import { gray } from "../theme/semantic-color.stylex"; 5 18 import { radius } from "../theme/radius.stylex"; 6 19 import { Size } from "../types"; 7 20 import { 8 - ListBox, 9 - ListBoxItem, 10 - ListBoxItemProps, 11 21 ListBoxSectionHeaderProps, 12 22 ListBoxSectionHeader, 13 23 ListBoxSeparator, 14 24 ListBoxSeparatorProps, 15 - ListBoxSectionProps, 16 - ListBoxSection, 17 25 } from "../listbox"; 18 26 import { SizeContext } from "../context"; 27 + import { fontWeight, typeramp } from "../theme/typography.stylex"; 28 + import { useContext } from "react"; 29 + import { Check, ChevronRight } from "lucide-react"; 30 + import { plum, slate } from "../theme/colors.stylex"; 19 31 20 32 const styles = stylex.create({ 21 33 popover: { ··· 27 39 paddingTop: spacing["1"], 28 40 width: "var(--trigger-width)", 29 41 }, 42 + menu: { 43 + outline: "none", 44 + }, 45 + section: {}, 46 + item: { 47 + display: "flex", 48 + userSelect: "none", 49 + 50 + boxSizing: "border-box", 51 + fontWeight: fontWeight["medium"], 52 + outline: { 53 + default: "none", 54 + ":focus": "none", 55 + }, 56 + padding: spacing["1"], 57 + }, 58 + sm: { 59 + height: spacing["9"], 60 + }, 61 + md: { 62 + height: spacing["9"], 63 + }, 64 + lg: { 65 + height: spacing["11"], 66 + }, 67 + itemInner: { 68 + alignItems: "center", 69 + backgroundColor: { 70 + default: "transparent", 71 + [":is(:hover > *)"]: slate[4], 72 + [":is(:active > *)"]: slate[5], 73 + }, 74 + borderRadius: radius["md"], 75 + boxSizing: "border-box", 76 + display: "flex", 77 + flexGrow: 1, 78 + gap: spacing["2"], 79 + justifyContent: "space-between", 80 + paddingLeft: spacing["2"], 81 + paddingRight: spacing["2"], 82 + transitionDuration: "100ms", 83 + transitionProperty: "background-color", 84 + transitionTimingFunction: "ease-in-out", 85 + }, 86 + check: { 87 + color: plum[9], 88 + }, 30 89 }); 31 90 32 91 export interface MenuProps<T extends object> 33 - extends Omit<MenuTriggerProps, "trigger" | "children"> { 92 + extends Omit<MenuTriggerProps, "trigger" | "children">, 93 + Omit<AriaMenuProps<T>, "children" | "className" | "style">, 94 + Pick< 95 + PopoverProps, 96 + | "shouldCloseOnInteractOutside" 97 + | "shouldFlip" 98 + | "shouldUpdatePosition" 99 + | "placement" 100 + > { 34 101 trigger: React.ReactNode; 35 102 items?: Iterable<T>; 36 103 children: React.ReactNode | ((item: T) => React.ReactNode); ··· 39 106 40 107 export function Menu<T extends object>({ 41 108 trigger, 42 - children, 43 - items, 44 109 size = "md", 110 + defaultOpen, 111 + isOpen, 112 + onOpenChange, 113 + shouldCloseOnInteractOutside, 114 + shouldFlip, 115 + shouldUpdatePosition, 116 + placement, 45 117 ...props 46 118 }: MenuProps<T>) { 47 119 return ( 48 120 <SizeContext.Provider value={size}> 49 - <MenuTrigger {...props}> 121 + <MenuTrigger 122 + defaultOpen={defaultOpen} 123 + isOpen={isOpen} 124 + onOpenChange={onOpenChange} 125 + > 50 126 {trigger} 51 127 <Popover 128 + containerPadding={8} 129 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 130 + shouldFlip={shouldFlip} 131 + shouldUpdatePosition={shouldUpdatePosition} 132 + placement={placement} 52 133 {...stylex.props( 53 134 styles.popover, 54 135 gray.bgSubtle, ··· 56 137 gray.border 57 138 )} 58 139 > 59 - <ListBox items={items}>{children}</ListBox> 140 + <AriaMenu {...props} {...stylex.props(styles.menu)} /> 60 141 </Popover> 61 142 </MenuTrigger> 62 143 </SizeContext.Provider> 63 144 ); 64 145 } 65 146 66 - export type MenuItemProps = ListBoxItemProps; 67 - export const MenuItem = ListBoxItem; 68 - export type MenuSectionProps<T extends object> = ListBoxSectionProps<T>; 69 - export const MenuSection = ListBoxSection; 147 + export interface SubMenuProps<T extends object> 148 + extends Omit<SubmenuTriggerProps, "trigger" | "children">, 149 + Omit<AriaMenuProps<T>, "children" | "className" | "style">, 150 + Pick< 151 + PopoverProps, 152 + | "shouldCloseOnInteractOutside" 153 + | "shouldFlip" 154 + | "shouldUpdatePosition" 155 + | "placement" 156 + > { 157 + trigger: React.ReactElement<MenuTriggerProps>; 158 + children: React.ReactNode | ((item: T) => React.ReactNode); 159 + items?: Iterable<T>; 160 + size?: Size; 161 + } 162 + 163 + export function SubMenu<T extends object>({ 164 + trigger, 165 + delay, 166 + shouldCloseOnInteractOutside, 167 + shouldFlip, 168 + shouldUpdatePosition, 169 + placement, 170 + ...props 171 + }: SubMenuProps<T>) { 172 + return ( 173 + <SubmenuTrigger delay={delay}> 174 + {trigger} 175 + <Popover 176 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 177 + shouldFlip={shouldFlip} 178 + shouldUpdatePosition={shouldUpdatePosition} 179 + placement={placement} 180 + containerPadding={8} 181 + offset={-8} 182 + {...stylex.props(styles.popover, gray.bgSubtle, gray.text, gray.border)} 183 + > 184 + <AriaMenu {...props} /> 185 + </Popover> 186 + </SubmenuTrigger> 187 + ); 188 + } 189 + 190 + export interface MenuSectionProps<T extends object> 191 + extends Omit<AriaMenuSectionProps<T>, "style" | "className"> { 192 + style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 193 + children: React.ReactNode; 194 + } 195 + 196 + export function MenuSection<T extends object>({ 197 + style, 198 + ...props 199 + }: MenuSectionProps<T>) { 200 + return ( 201 + <AriaMenuSection {...props} {...stylex.props(styles.section, style)} /> 202 + ); 203 + } 204 + 205 + export interface MenuItemProps 206 + extends Omit<AriaMenuItemProps, "style" | "className" | "children"> { 207 + style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 208 + children: React.ReactNode; 209 + } 210 + 211 + export function MenuItem({ style, children, ...props }: MenuItemProps) { 212 + const size = useContext(SizeContext); 213 + 214 + return ( 215 + <AriaMenuItem 216 + {...props} 217 + {...stylex.props(typeramp.label, styles.item, styles[size], style)} 218 + > 219 + {({ isSelected, hasSubmenu }) => ( 220 + <div {...stylex.props(styles.itemInner)}> 221 + {children} 222 + {isSelected && <Check size={16} {...stylex.props(styles.check)} />} 223 + {hasSubmenu && <ChevronRight size={16} />} 224 + </div> 225 + )} 226 + </AriaMenuItem> 227 + ); 228 + } 229 + 70 230 export type MenuSectionHeaderProps = ListBoxSectionHeaderProps; 71 231 export const MenuSectionHeader = ListBoxSectionHeader; 72 232 export type MenuSeparatorProps = ListBoxSeparatorProps;
+18 -1
packages/hip-ui/src/components/select/index.tsx
··· 3 3 Button, 4 4 Popover, 5 5 SelectValue, 6 + PopoverProps, 6 7 } from "react-aria-components"; 7 8 import { Select as AriaSelect } from "react-aria-components"; 8 9 import * as stylex from "@stylexjs/stylex"; ··· 86 87 }); 87 88 88 89 export interface SelectProps<T extends object, M extends "single" | "multiple"> 89 - extends Omit<AriaSelectProps<T, M>, "children" | "style" | "className"> { 90 + extends Omit<AriaSelectProps<T, M>, "children" | "style" | "className">, 91 + Pick< 92 + PopoverProps, 93 + | "shouldCloseOnInteractOutside" 94 + | "shouldFlip" 95 + | "shouldUpdatePosition" 96 + | "placement" 97 + > { 90 98 style?: stylex.StyleXStyles | stylex.StyleXStyles[]; 91 99 label?: string; 92 100 description?: string; ··· 107 115 items, 108 116 style, 109 117 size = "md", 118 + shouldCloseOnInteractOutside, 119 + shouldFlip, 120 + shouldUpdatePosition, 121 + placement, 110 122 ...props 111 123 }: SelectProps<T, M>) { 112 124 return ( ··· 122 134 {description && <Description size={size}>{description}</Description>} 123 135 <FieldError>{errorMessage}</FieldError> 124 136 <Popover 137 + containerPadding={8} 138 + shouldCloseOnInteractOutside={shouldCloseOnInteractOutside} 139 + shouldFlip={shouldFlip} 140 + shouldUpdatePosition={shouldUpdatePosition} 141 + placement={placement} 125 142 {...stylex.props( 126 143 styles.popover, 127 144 gray.bgSubtle,