@stratakit/bricks
Version:
Small, modular components for StrataKit
51 lines (50 loc) • 1.71 kB
JavaScript
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 { CaretsUpDown } from "./~utils.icons.js";
import { useInit } from "./~utils.useInit.js";
import { useFieldControlType } from "./Field.internal.js";
const supportsHas = isBrowser && CSS?.supports?.("selector(:has(+ *))");
const HtmlSelectContext = React.createContext(() => {
});
const SelectRoot = forwardRef((props, forwardedRef) => {
useInit();
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}SelectRoot", props.className),
"data-_sk-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}Select", props.className),
"data-_sk-tone": "neutral",
"data-_sk-variant": variant,
ref: forwardedRef
}), /* @__PURE__ */ jsx(CaretsUpDown, {
className: "\u{1F95D}SelectArrow"
})]
});
});
export {
HtmlSelect,
SelectRoot as Root
};