UNPKG

@stratakit/bricks

Version:

Small, modular components for StrataKit

53 lines (52 loc) 1.76 kB
import { Fragment, jsx, jsxs } from "react/jsx-runtime"; import * as React from "react"; import { Role } from "@ariakit/react/role"; import { forwardRef, isBrowser } from "@stratakit/foundations/secret-internals"; import cx from "classnames"; import { DisclosureArrow } from "./~utils.icons.js"; import { useFieldControlType } from "./Field.internal.js"; const supportsHas = isBrowser && CSS?.supports?.("selector(:has(+ *))"); const HtmlSelectContext = React.createContext(() => { }); const SelectRoot = forwardRef((props, forwardedRef) => { useFieldControlType("textlike"); const [isHtmlSelect, setIsHtmlSelect] = React.useState(false); return /* @__PURE__ */ jsx(HtmlSelectContext.Provider, { value: setIsHtmlSelect, children: /* @__PURE__ */ jsx( Role.div, { ...props, className: cx("\u{1F95D}-select-root", props.className), "data-kiwi-has-select": !supportsHas && isHtmlSelect ? "true" : void 0, ref: forwardedRef } ) }); }); const HtmlSelect = forwardRef( (props, forwardedRef) => { const { variant = "solid", ...rest } = props; const setIsHtmlSelect = React.useContext(HtmlSelectContext); React.useEffect( function updateContext() { setIsHtmlSelect(true); }, [setIsHtmlSelect] ); return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx( Role.select, { ...rest, className: cx("\u{1F95D}-button", "\u{1F95D}-select", props.className), "data-kiwi-tone": "neutral", "data-kiwi-variant": variant, ref: forwardedRef } ), /* @__PURE__ */ jsx(DisclosureArrow, { className: "\u{1F95D}-select-arrow" }) ] }); } ); export { HtmlSelect, SelectRoot as Root };