@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
146 lines (145 loc) • 5.41 kB
JavaScript
"use client";
import { getRadius, getSize } from "../../core/utils/get-size/get-size.mjs";
import { createVarsResolver } from "../../core/styles-api/create-vars-resolver/create-vars-resolver.mjs";
import { parseThemeColor } from "../../core/MantineProvider/color-functions/parse-theme-color/parse-theme-color.mjs";
import { getThemeColor } from "../../core/MantineProvider/color-functions/get-theme-color/get-theme-color.mjs";
import { getContrastColor } from "../../core/MantineProvider/color-functions/get-contrast-color/get-contrast-color.mjs";
import { getAutoContrastValue } from "../../core/MantineProvider/color-functions/get-auto-contrast-value/get-auto-contrast-value.mjs";
import { useProps } from "../../core/MantineProvider/use-props/use-props.mjs";
import { useStyles } from "../../core/styles-api/use-styles/use-styles.mjs";
import { extractStyleProps } from "../../core/Box/style-props/extract-style-props/extract-style-props.mjs";
import { factory } from "../../core/factory/factory.mjs";
import { Box } from "../../core/Box/Box.mjs";
import { InlineInput, InlineInputClasses } from "../../utils/InlineInput/InlineInput.mjs";
import { CheckboxGroup, CheckboxGroupContext } from "./CheckboxGroup/CheckboxGroup.mjs";
import { CheckboxCard } from "./CheckboxCard/CheckboxCard.mjs";
import { CheckboxIcon } from "./CheckIcon.mjs";
import { CheckboxIndicator } from "./CheckboxIndicator/CheckboxIndicator.mjs";
import Checkbox_module_default from "./Checkbox.module.mjs";
import { use, useEffect, useRef } from "react";
import { useId as useId$1, useMergedRef } from "@mantine/hooks";
import { jsx, jsxs } from "react/jsx-runtime";
//#region packages/@mantine/core/src/components/Checkbox/Checkbox.tsx
const defaultProps = {
labelPosition: "right",
icon: CheckboxIcon,
withErrorStyles: true,
variant: "filled",
radius: "sm"
};
const varsResolver = createVarsResolver((theme, { radius, color, size, iconColor, variant, autoContrast }) => {
const parsedColor = parseThemeColor({
color: color || theme.primaryColor,
theme
});
const outlineColor = parsedColor.isThemeColor && parsedColor.shade === void 0 ? `var(--mantine-color-${parsedColor.color}-outline)` : parsedColor.color;
return { root: {
"--checkbox-size": getSize(size, "checkbox-size"),
"--checkbox-radius": radius === void 0 ? void 0 : getRadius(radius),
"--checkbox-color": variant === "outline" ? outlineColor : getThemeColor(color, theme),
"--checkbox-icon-color": iconColor ? getThemeColor(iconColor, theme) : getAutoContrastValue(autoContrast, theme) ? getContrastColor({
color,
theme,
autoContrast
}) : void 0
} };
});
const Checkbox = factory((_props) => {
const props = useProps("Checkbox", defaultProps, _props);
const { classNames, className, style, styles, unstyled, vars, color, label, id, size, radius, wrapperProps, checked, labelPosition, description, error, disabled, variant, indeterminate, icon: Icon, rootRef, iconColor, onChange, autoContrast, mod, attributes, readOnly, onClick, withErrorStyles, ref, ...others } = props;
const inputRef = useRef(null);
const ctx = use(CheckboxGroupContext);
const _size = size || ctx?.size;
const getStyles = useStyles({
name: "Checkbox",
props,
classes: Checkbox_module_default,
className,
style,
classNames,
styles,
unstyled,
attributes,
vars,
varsResolver
});
const { styleProps, rest } = extractStyleProps(others);
const uuid = useId$1(id);
const withContextProps = {
checked: ctx?.value.includes(rest.value) ?? checked,
onChange: (event) => {
ctx?.onChange(event);
onChange?.(event);
}
};
const isDisabledByGroup = ctx?.isDisabled?.(rest.value) ?? false;
const finalDisabled = disabled || isDisabledByGroup;
useEffect(() => {
if (inputRef.current) {
inputRef.current.indeterminate = indeterminate || false;
if (indeterminate) inputRef.current.setAttribute("data-indeterminate", "true");
else inputRef.current.removeAttribute("data-indeterminate");
}
}, [indeterminate]);
return /* @__PURE__ */ jsx(InlineInput, {
...getStyles("root"),
__staticSelector: "Checkbox",
__stylesApiProps: props,
id: uuid,
size: _size,
labelPosition,
label,
description,
error,
disabled: finalDisabled,
classNames,
styles,
unstyled,
"data-checked": withContextProps.checked || checked || void 0,
variant,
ref: rootRef,
mod,
attributes,
inert: rest.inert,
...styleProps,
...wrapperProps,
children: /* @__PURE__ */ jsxs(Box, {
...getStyles("inner"),
mod: { "data-label-position": labelPosition },
children: [/* @__PURE__ */ jsx(Box, {
component: "input",
id: uuid,
ref: useMergedRef(inputRef, ref),
mod: { error: !!error },
...getStyles("input", {
focusable: true,
variant
}),
...rest,
...withContextProps,
disabled: finalDisabled,
inert: rest.inert,
type: "checkbox",
onClick: (event) => {
if (readOnly) event.preventDefault();
onClick?.(event);
}
}), /* @__PURE__ */ jsx(Icon, {
indeterminate,
...getStyles("icon")
})]
})
});
});
Checkbox.classes = {
...Checkbox_module_default,
...InlineInputClasses
};
Checkbox.varsResolver = varsResolver;
Checkbox.displayName = "@mantine/core/Checkbox";
Checkbox.Group = CheckboxGroup;
Checkbox.Indicator = CheckboxIndicator;
Checkbox.Card = CheckboxCard;
//#endregion
export { Checkbox };
//# sourceMappingURL=Checkbox.mjs.map