@yamada-ui/checkbox 1.3.0 → 1.3.1-dev-20241201045027
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checkbox-card-group.js +78 -44
- package/dist/checkbox-card-group.js.map +1 -1
- package/dist/checkbox-card-group.mjs +5 -5
- package/dist/checkbox-card.js +78 -44
- package/dist/checkbox-card.js.map +1 -1
- package/dist/checkbox-card.mjs +3 -3
- package/dist/checkbox-group.js +78 -44
- package/dist/checkbox-group.js.map +1 -1
- package/dist/checkbox-group.mjs +4 -4
- package/dist/checkbox.d.mts +16 -0
- package/dist/checkbox.d.ts +16 -0
- package/dist/checkbox.js +78 -44
- package/dist/checkbox.js.map +1 -1
- package/dist/checkbox.mjs +2 -2
- package/dist/{chunk-YKJPEUZC.mjs → chunk-A2JXM6CV.mjs} +67 -37
- package/dist/chunk-A2JXM6CV.mjs.map +1 -0
- package/dist/{chunk-4RRLZHGB.mjs → chunk-AMQ63CU2.mjs} +3 -3
- package/dist/{chunk-T4XJ55LG.mjs → chunk-D2MZMI2W.mjs} +3 -3
- package/dist/{chunk-LSEGOUL4.mjs → chunk-KRCEAKWH.mjs} +14 -10
- package/dist/chunk-KRCEAKWH.mjs.map +1 -0
- package/dist/{chunk-LDQSOOV2.mjs → chunk-LF6W4EB7.mjs} +3 -3
- package/dist/{chunk-3D6OL2QO.mjs → chunk-PH5Y6VMS.mjs} +1 -1
- package/dist/chunk-PH5Y6VMS.mjs.map +1 -0
- package/dist/index.js +78 -44
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/use-checkbox-group.d.mts +2 -0
- package/dist/use-checkbox-group.d.ts +2 -0
- package/dist/use-checkbox-group.js.map +1 -1
- package/dist/use-checkbox-group.mjs +1 -1
- package/dist/use-checkbox.d.mts +51 -1
- package/dist/use-checkbox.d.ts +51 -1
- package/dist/use-checkbox.js +66 -36
- package/dist/use-checkbox.js.map +1 -1
- package/dist/use-checkbox.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-3D6OL2QO.mjs.map +0 -1
- package/dist/chunk-LSEGOUL4.mjs.map +0 -1
- package/dist/chunk-YKJPEUZC.mjs.map +0 -1
- /package/dist/{chunk-4RRLZHGB.mjs.map → chunk-AMQ63CU2.mjs.map} +0 -0
- /package/dist/{chunk-T4XJ55LG.mjs.map → chunk-D2MZMI2W.mjs.map} +0 -0
- /package/dist/{chunk-LDQSOOV2.mjs.map → chunk-LF6W4EB7.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/use-checkbox.ts"],"sourcesContent":["import type { PropGetter } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { Dict } from \"@yamada-ui/utils\"\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n FocusEventHandler,\n KeyboardEvent,\n SyntheticEvent,\n} from \"react\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport { trackFocusVisible } from \"@yamada-ui/use-focus-visible\"\nimport {\n dataAttr,\n handlerAll,\n mergeRefs,\n splitObject,\n useCallbackRef,\n useSafeLayoutEffect,\n useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\"\n\nexport interface UseCheckboxProps<Y extends number | string = string>\n extends FormControlOptions {\n /**\n * id assigned to input.\n */\n id?: string\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n /**\n * If `true`, the checkbox will be checked.\n *\n * @default false\n */\n checked?: boolean\n /**\n * If `true`, the checkbox will be initially checked.\n *\n * @default false\n */\n defaultChecked?: boolean\n /**\n * If `true`, the checkbox will be initially checked.\n *\n * @default false\n *\n * @deprecated Use `defaultChecked` instead.\n */\n defaultIsChecked?: boolean\n /**\n * If `true`, the checkbox will be indeterminate.\n *\n * @default false\n */\n indeterminate?: boolean\n /**\n * If `true`, the checkbox will be checked.\n *\n * @default false\n *\n * @deprecated Use `checked` instead.\n */\n isChecked?: boolean\n /**\n * If `true`, the checkbox will be indeterminate.\n *\n * @default false\n *\n * @deprecated Use `indeterminate` instead.\n */\n isIndeterminate?: boolean\n /**\n * If `true`, the checkbox will be selected when the Enter key is pressed.\n *\n * @default false\n */\n selectOnEnter?: boolean\n /**\n * The tab-index property of the underlying input element.\n */\n tabIndex?: number\n /**\n * The value to be used in the checkbox input.\n */\n value?: Y\n /**\n * The callback invoked when the checkbox is blurred.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>\n /**\n * The callback invoked when the checked state changes.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>\n /**\n * The callback invoked when the checkbox is focused.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>\n}\n\nexport const useCheckbox = <\n Y extends number | string = string,\n M extends Dict = Dict,\n>({\n id,\n ...props\n}: M & UseCheckboxProps<Y>) => {\n const uuid = useId()\n\n id ??= uuid\n\n let {\n id: _id,\n name,\n checked: checkedProp,\n defaultChecked,\n defaultIsChecked,\n indeterminate,\n isChecked: isCheckedProp,\n isIndeterminate,\n selectOnEnter,\n tabIndex,\n value,\n onChange: onChangeProp,\n ...computedProps\n } = useFormControlProps({ id, ...props })\n\n checkedProp ??= isCheckedProp\n indeterminate ??= isIndeterminate\n defaultChecked ??= defaultIsChecked\n\n const [\n {\n \"aria-readonly\": _ariaReadonly,\n disabled,\n readOnly,\n required,\n onBlur: onBlurProp,\n onFocus: onFocusProp,\n ...formControlProps\n },\n rest,\n ] = splitObject(computedProps, formControlProperties)\n\n const [focusVisible, setFocusVisible] = useState<boolean>(false)\n const [focused, setFocused] = useState<boolean>(false)\n const [hovered, setHovered] = useState<boolean>(false)\n const [active, setActive] = useState<boolean>(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [label, setLabel] = useState<boolean>(true)\n\n const [isChecked, setIsChecked] = useState<boolean>(!!defaultChecked)\n\n const controlled = checkedProp !== undefined\n const checked = controlled ? (checkedProp as boolean) : isChecked\n\n const onChange = useCallbackRef(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (readOnly || disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (!controlled)\n setIsChecked(!checked || indeterminate ? true : ev.target.checked)\n\n onChangeProp?.(ev)\n },\n [readOnly, disabled, controlled, checked, indeterminate],\n )\n const onFocus = useCallbackRef(onFocusProp)\n const onBlur = useCallbackRef(onBlurProp)\n\n const onKeyDown = useCallback(\n ({ key }: KeyboardEvent) => {\n if (key === \" \") setActive(true)\n\n if (selectOnEnter && key === \"Enter\") inputRef.current?.click()\n },\n [setActive, selectOnEnter],\n )\n\n const onKeyUp = useCallback(\n ({ key }: KeyboardEvent) => {\n if (key === \" \") setActive(false)\n },\n [setActive],\n )\n\n useEffect(() => {\n return trackFocusVisible(setFocusVisible)\n }, [])\n\n useSafeLayoutEffect(() => {\n if (inputRef.current)\n inputRef.current.indeterminate = Boolean(isIndeterminate)\n }, [isIndeterminate])\n\n useUpdateEffect(() => {\n if (disabled) setFocused(false)\n }, [disabled, setFocused])\n\n useSafeLayoutEffect(() => {\n if (!inputRef.current?.form) return\n\n inputRef.current.form.onreset = () => setIsChecked(!!defaultChecked)\n }, [])\n\n useSafeLayoutEffect(() => {\n if (!inputRef.current) return\n\n if (inputRef.current.checked !== checked)\n setIsChecked(inputRef.current.checked)\n }, [inputRef.current])\n\n const getContainerProps: PropGetter<\"label\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref: mergeRefs(ref, (el: HTMLElement | undefined) => {\n if (el) setLabel(el.tagName === \"LABEL\")\n }),\n \"data-checked\": dataAttr(checked),\n \"data-focus\": dataAttr(focused),\n \"data-focus-visible\": dataAttr(focused && focusVisible),\n onClick: handlerAll(props.onClick, () => {\n if (label) return\n\n inputRef.current?.click()\n\n requestAnimationFrame(() => inputRef.current?.focus())\n }),\n }),\n [checked, label, focused, focusVisible, formControlProps],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref,\n \"aria-hidden\": true,\n \"data-active\": dataAttr(active),\n \"data-checked\": dataAttr(checked),\n \"data-focus\": dataAttr(focused),\n \"data-focus-visible\": dataAttr(focused && focusVisible),\n \"data-hover\": dataAttr(hovered),\n \"data-indeterminate\": dataAttr(indeterminate),\n onMouseDown: handlerAll(props.onMouseDown, (ev: React.MouseEvent) => {\n if (focused) ev.preventDefault()\n\n setActive(true)\n }),\n onMouseEnter: handlerAll(props.onMouseEnter, () => setHovered(true)),\n onMouseLeave: handlerAll(props.onMouseLeave, () => setHovered(false)),\n onMouseUp: handlerAll(props.onMouseUp, () => setActive(false)),\n }),\n [\n active,\n checked,\n focused,\n hovered,\n focusVisible,\n indeterminate,\n formControlProps,\n ],\n )\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n id,\n ref: mergeRefs(inputRef, ref),\n type: \"checkbox\",\n name,\n style: {\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0px\",\n position: \"absolute\",\n whiteSpace: \"nowrap\",\n width: \"1px\",\n },\n \"aria-checked\": indeterminate ? \"mixed\" : checked,\n checked,\n disabled,\n readOnly,\n required,\n tabIndex,\n value,\n onBlur: handlerAll(props.onBlur, onBlur, () => setFocused(false)),\n onChange: handlerAll(props.onChange, onChange),\n onFocus: handlerAll(props.onFocus, onFocus, () => setFocused(true)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onKeyUp: handlerAll(props.onKeyUp, onKeyUp),\n }),\n [\n indeterminate,\n formControlProps,\n id,\n name,\n value,\n tabIndex,\n required,\n disabled,\n readOnly,\n checked,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ],\n )\n\n const getLabelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref,\n \"data-checked\": dataAttr(checked),\n onMouseDown: handlerAll(props.onMouseDown, (ev: SyntheticEvent) => {\n ev.preventDefault()\n ev.stopPropagation()\n }),\n onTouchStart: handlerAll(props.onTouchStart, (ev: SyntheticEvent) => {\n ev.preventDefault()\n ev.stopPropagation()\n }),\n }),\n [checked, formControlProps],\n )\n\n return {\n active,\n checked,\n focused,\n focusVisible,\n hovered,\n indeterminate,\n /**\n * @deprecated Use `active` instead.\n */\n isActive: active,\n /**\n * @deprecated Use `checked` instead.\n */\n isChecked: checked,\n /**\n * @deprecated Use `focused` instead.\n */\n isFocused: focused,\n /**\n * @deprecated Use `focusVisible` instead.\n */\n isFocusVisible: focusVisible,\n /**\n * @deprecated Use `hovered` instead.\n */\n isHovered: hovered,\n /**\n * @deprecated Use `indeterminate` instead.\n */\n isIndeterminate,\n props: rest,\n getContainerProps,\n getIconProps,\n getInputProps,\n getLabelProps,\n }\n}\n\nexport type UseCheckboxReturn = ReturnType<typeof useCheckbox>\n"],"mappings":"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","names":["props","_a"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import {
|
|
3
3
|
CheckboxCard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-D2MZMI2W.mjs";
|
|
5
5
|
import {
|
|
6
6
|
useCheckboxGroup
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PH5Y6VMS.mjs";
|
|
8
8
|
import {
|
|
9
9
|
CheckboxCardGroupProvider
|
|
10
10
|
} from "./chunk-2VDJDPFI.mjs";
|
|
@@ -85,4 +85,4 @@ CheckboxCardGroup.__ui__ = "CheckboxCardGroup";
|
|
|
85
85
|
export {
|
|
86
86
|
CheckboxCardGroup
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-AMQ63CU2.mjs.map
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
} from "./chunk-7QPJ25CW.mjs";
|
|
11
11
|
import {
|
|
12
12
|
CheckboxIcon
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KRCEAKWH.mjs";
|
|
14
14
|
import {
|
|
15
15
|
useCheckbox
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-A2JXM6CV.mjs";
|
|
17
17
|
import {
|
|
18
18
|
CheckboxCardProvider,
|
|
19
19
|
useCheckboxCardGroupContext
|
|
@@ -142,4 +142,4 @@ CheckboxCard.__ui__ = "CheckboxCard";
|
|
|
142
142
|
export {
|
|
143
143
|
CheckboxCard
|
|
144
144
|
};
|
|
145
|
-
//# sourceMappingURL=chunk-
|
|
145
|
+
//# sourceMappingURL=chunk-D2MZMI2W.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import {
|
|
3
3
|
useCheckbox
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A2JXM6CV.mjs";
|
|
5
5
|
import {
|
|
6
6
|
useCheckboxGroupContext
|
|
7
7
|
} from "./chunk-2VDJDPFI.mjs";
|
|
@@ -40,8 +40,8 @@ var Checkbox = forwardRef(
|
|
|
40
40
|
const isCheckedProp = groupValue && computedProps.value ? groupValue.includes(computedProps.value) : computedProps.isChecked;
|
|
41
41
|
const onChange = groupProps.onChange && computedProps.value ? funcAll(groupProps.onChange, computedProps.onChange) : computedProps.onChange;
|
|
42
42
|
const {
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
checked,
|
|
44
|
+
indeterminate,
|
|
45
45
|
props: rest,
|
|
46
46
|
getContainerProps,
|
|
47
47
|
getIconProps,
|
|
@@ -58,15 +58,15 @@ var Checkbox = forwardRef(
|
|
|
58
58
|
});
|
|
59
59
|
const { children: customIcon, ...resolvedIconProps } = { ...iconProps };
|
|
60
60
|
const icon = cloneElement(customIcon != null ? customIcon : /* @__PURE__ */ jsx(CheckboxIcon, {}), {
|
|
61
|
-
|
|
61
|
+
checked,
|
|
62
|
+
indeterminate,
|
|
62
63
|
isDisabled,
|
|
63
|
-
isIndeterminate,
|
|
64
64
|
isInvalid,
|
|
65
65
|
isReadOnly,
|
|
66
66
|
isRequired,
|
|
67
67
|
__css: {
|
|
68
|
-
opacity:
|
|
69
|
-
transform:
|
|
68
|
+
opacity: checked || indeterminate ? 1 : 0,
|
|
69
|
+
transform: checked || indeterminate ? "scale(1)" : "scale(0.95)",
|
|
70
70
|
transitionDuration: "normal",
|
|
71
71
|
transitionProperty: "transform"
|
|
72
72
|
}
|
|
@@ -125,6 +125,8 @@ var Checkbox = forwardRef(
|
|
|
125
125
|
Checkbox.displayName = "Checkbox";
|
|
126
126
|
Checkbox.__ui__ = "Checkbox";
|
|
127
127
|
var CheckboxIcon = ({
|
|
128
|
+
checked,
|
|
129
|
+
indeterminate,
|
|
128
130
|
isChecked,
|
|
129
131
|
isDisabled: _isDisabled,
|
|
130
132
|
isIndeterminate,
|
|
@@ -133,7 +135,9 @@ var CheckboxIcon = ({
|
|
|
133
135
|
isRequired: _isRequired,
|
|
134
136
|
...rest
|
|
135
137
|
}) => {
|
|
136
|
-
|
|
138
|
+
checked != null ? checked : checked = isChecked;
|
|
139
|
+
indeterminate != null ? indeterminate : indeterminate = isIndeterminate;
|
|
140
|
+
return /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: indeterminate || checked ? /* @__PURE__ */ jsx(
|
|
137
141
|
ui.div,
|
|
138
142
|
{
|
|
139
143
|
__css: {
|
|
@@ -157,7 +161,7 @@ var CheckboxIcon = ({
|
|
|
157
161
|
checked: { scale: 1 },
|
|
158
162
|
unchecked: { scale: 0.5 }
|
|
159
163
|
},
|
|
160
|
-
children:
|
|
164
|
+
children: indeterminate ? /* @__PURE__ */ jsx(CheckboxIndeterminateIcon, { ...rest }) : /* @__PURE__ */ jsx(CheckboxCheckIcon, { ...rest })
|
|
161
165
|
}
|
|
162
166
|
)
|
|
163
167
|
}
|
|
@@ -228,4 +232,4 @@ export {
|
|
|
228
232
|
Checkbox,
|
|
229
233
|
CheckboxIcon
|
|
230
234
|
};
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
235
|
+
//# sourceMappingURL=chunk-KRCEAKWH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/checkbox.tsx"],"sourcesContent":["import type {\n ComponentArgs,\n FC,\n HTMLUIProps,\n ThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { MotionProps } from \"@yamada-ui/motion\"\nimport type { Merge } from \"@yamada-ui/utils\"\nimport type {\n CSSProperties,\n ForwardedRef,\n InputHTMLAttributes,\n ReactElement,\n ReactNode,\n Ref,\n} from \"react\"\nimport type { UseCheckboxProps } from \"./use-checkbox\"\nimport { omitThemeProps, ui, useComponentMultiStyle } from \"@yamada-ui/core\"\nimport { useFormControl } from \"@yamada-ui/form-control\"\nimport { AnimatePresence, motion } from \"@yamada-ui/motion\"\nimport { cx, funcAll } from \"@yamada-ui/utils\"\nimport { cloneElement, forwardRef } from \"react\"\nimport { useCheckboxGroupContext } from \"./checkbox-context\"\nimport { useCheckbox } from \"./use-checkbox\"\n\ninterface CheckboxOptions {\n /**\n * The label of the checkbox.\n */\n label?: ReactNode\n /**\n * Props for icon component.\n */\n iconProps?: { children: ReactElement } & Omit<HTMLUIProps, \"children\">\n /**\n * Props for input element.\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>\n /**\n * Props for label element.\n */\n labelProps?: HTMLUIProps<\"span\">\n}\n\nexport interface CheckboxProps<Y extends number | string = string>\n extends Omit<Merge<HTMLUIProps<\"label\">, UseCheckboxProps<Y>>, \"checked\">,\n ThemeProps<\"Checkbox\">,\n CheckboxOptions {}\n\n/**\n * `Checkbox` is a component used for allowing users to select multiple values from multiple options.\n *\n * @see Docs https://yamada-ui.com/components/forms/checkbox\n */\nexport const Checkbox = forwardRef(\n <Y extends number | string = string>(\n props: CheckboxProps<Y>,\n ref: ForwardedRef<HTMLInputElement>,\n ) => {\n const group = useCheckboxGroupContext()\n const { value: groupValue, ...groupProps } = { ...group }\n const control = useFormControl(props)\n const [styles, mergedProps] = useComponentMultiStyle(\"Checkbox\", {\n ...groupProps,\n ...props,\n })\n const {\n className,\n children,\n gap = \"0.5rem\",\n isDisabled = groupProps.isDisabled ?? control.isDisabled,\n isInvalid = groupProps.isInvalid ?? control.isInvalid,\n isReadOnly = groupProps.isReadOnly ?? control.isReadOnly,\n isRequired = groupProps.isRequired ?? control.isRequired,\n label,\n iconProps,\n inputProps,\n labelProps,\n ...computedProps\n } = omitThemeProps(mergedProps)\n\n const isCheckedProp =\n groupValue && computedProps.value\n ? groupValue.includes(computedProps.value)\n : computedProps.isChecked\n const onChange =\n groupProps.onChange && computedProps.value\n ? funcAll(groupProps.onChange, computedProps.onChange)\n : computedProps.onChange\n\n const {\n checked,\n indeterminate,\n props: rest,\n getContainerProps,\n getIconProps,\n getInputProps,\n getLabelProps,\n } = useCheckbox({\n ...computedProps,\n isChecked: isCheckedProp,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n onChange,\n })\n\n const { children: customIcon, ...resolvedIconProps } = { ...iconProps }\n const icon = cloneElement(customIcon ?? <CheckboxIcon />, {\n checked,\n indeterminate,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n __css: {\n opacity: checked || indeterminate ? 1 : 0,\n transform: checked || indeterminate ? \"scale(1)\" : \"scale(0.95)\",\n transitionDuration: \"normal\",\n transitionProperty: \"transform\",\n },\n })\n\n return (\n <ui.label\n className={cx(\"ui-checkbox\", className)}\n {...getContainerProps()}\n __css={{\n alignItems: \"center\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n gap,\n position: \"relative\",\n verticalAlign: \"top\",\n ...styles.container,\n }}\n {...rest}\n >\n <ui.input\n className=\"ui-checkbox__input\"\n {...getInputProps(inputProps, ref)}\n />\n\n <ui.div\n className=\"ui-checkbox__icon\"\n __css={{\n display: \"inline-block\",\n position: \"relative\",\n userSelect: \"none\",\n ...styles.icon,\n }}\n {...getIconProps(resolvedIconProps)}\n >\n {icon}\n </ui.div>\n\n <ui.span\n className=\"ui-checkbox__label\"\n __css={{ ...styles.label }}\n {...getLabelProps(labelProps)}\n >\n {children ?? label}\n </ui.span>\n </ui.label>\n )\n },\n) as {\n <Y extends number | string = string>(\n props: { ref?: Ref<HTMLInputElement> } & CheckboxProps<Y>,\n ): ReactElement\n} & ComponentArgs\n\nCheckbox.displayName = \"Checkbox\"\nCheckbox.__ui__ = \"Checkbox\"\n\nexport type CheckboxIconProps = {\n /**\n * If `true`, the icon will be checked.\n *\n * @default false\n */\n checked?: boolean\n /**\n * If `true`, the icon will be indeterminate.\n *\n * @default false\n */\n indeterminate?: boolean\n /**\n * If `true`, the icon will be checked.\n *\n * @default false\n *\n * @deprecated Use `checked` instead.\n */\n isChecked?: boolean\n /**\n * If `true`, the icon will be indeterminate.\n *\n * @default false\n *\n * @deprecated Use `indeterminate` instead.\n */\n isIndeterminate?: boolean\n} & FormControlOptions &\n MotionProps<\"svg\">\n\nexport const CheckboxIcon: FC<CheckboxIconProps> = ({\n checked,\n indeterminate,\n isChecked,\n isDisabled: _isDisabled,\n isIndeterminate,\n isInvalid: _isInvalid,\n isReadOnly: _isReadOnly,\n isRequired: _isRequired,\n ...rest\n}) => {\n checked ??= isChecked\n indeterminate ??= isIndeterminate\n\n return (\n <AnimatePresence initial={false}>\n {indeterminate || checked ? (\n <ui.div\n __css={{\n left: \"50%\",\n position: \"absolute\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }}\n >\n <motion.div\n style={\n {\n alignItems: \"center\",\n display: \"flex\",\n justifyContent: \"center\",\n } as CSSProperties\n }\n animate=\"checked\"\n exit=\"unchecked\"\n initial=\"unchecked\"\n variants={{\n checked: { scale: 1 },\n unchecked: { scale: 0.5 },\n }}\n >\n {indeterminate ? (\n <CheckboxIndeterminateIcon {...rest} />\n ) : (\n <CheckboxCheckIcon {...rest} />\n )}\n </motion.div>\n </ui.div>\n ) : null}\n </AnimatePresence>\n )\n}\n\nCheckboxIcon.displayName = \"CheckboxIcon\"\nCheckboxIcon.__ui__ = \"CheckboxIcon\"\n\ninterface CheckboxCheckIconProps extends MotionProps<\"svg\"> {}\n\nconst CheckboxCheckIcon: FC<CheckboxCheckIconProps> = (props) => {\n return (\n <motion.svg\n style={{\n fill: \"none\",\n stroke: \"currentColor\",\n strokeDasharray: 16,\n strokeWidth: 2,\n }}\n variants={{\n checked: {\n opacity: 1,\n strokeDashoffset: 0,\n transition: { duration: 0.2 },\n },\n unchecked: {\n opacity: 0,\n strokeDashoffset: 16,\n },\n }}\n viewBox=\"0 0 12 10\"\n width=\"1.2em\"\n {...props}\n >\n <polyline points=\"1.5 6 4.5 9 10.5 1\" />\n </motion.svg>\n )\n}\n\nCheckboxCheckIcon.displayName = \"CheckboxCheckIcon\"\nCheckboxCheckIcon.__ui__ = \"CheckboxCheckIcon\"\n\ninterface CheckboxIndeterminateIconProps extends MotionProps<\"svg\"> {}\n\nconst CheckboxIndeterminateIcon: FC<CheckboxIndeterminateIconProps> = (\n props,\n) => {\n return (\n <motion.svg\n style={{ stroke: \"currentColor\", strokeWidth: 4 }}\n variants={{\n checked: {\n opacity: 1,\n scaleX: 1,\n transition: {\n opacity: { duration: 0.02 },\n scaleX: { duration: 0 },\n },\n },\n unchecked: {\n opacity: 0,\n scaleX: 0.65,\n },\n }}\n viewBox=\"0 0 24 24\"\n width=\"1.2em\"\n {...props}\n >\n <line x1=\"21\" x2=\"3\" y1=\"12\" y2=\"12\" />\n </motion.svg>\n )\n}\n\nCheckboxIndeterminateIcon.displayName = \"CheckboxIndeterminateIcon\"\nCheckboxIndeterminateIcon.__ui__ = \"CheckboxIndeterminateIcon\"\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import {
|
|
3
3
|
useCheckboxGroup
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PH5Y6VMS.mjs";
|
|
5
5
|
import {
|
|
6
6
|
Checkbox
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KRCEAKWH.mjs";
|
|
8
8
|
import {
|
|
9
9
|
CheckboxGroupProvider
|
|
10
10
|
} from "./chunk-2VDJDPFI.mjs";
|
|
@@ -77,4 +77,4 @@ CheckboxGroup.__ui__ = "CheckboxGroup";
|
|
|
77
77
|
export {
|
|
78
78
|
CheckboxGroup
|
|
79
79
|
};
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-LF6W4EB7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/use-checkbox-group.ts"],"sourcesContent":["import type { PropGetter } from \"@yamada-ui/core\"\nimport type { Dict } from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ReactNode } from \"react\"\nimport type { CheckboxProps } from \"./checkbox\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { isObject, useCallbackRef } from \"@yamada-ui/utils\"\nimport { useCallback } from \"react\"\n\nexport interface CheckboxItem<Y extends number | string = string>\n extends CheckboxProps<Y> {\n label?: ReactNode\n}\n\nconst isEvent = (value: any): value is { target: HTMLInputElement } =>\n value && isObject(value) && isObject(value.target)\n\nexport interface UseCheckboxGroupProps<Y extends number | string = string> {\n /**\n * The initial value of the checkbox group.\n */\n defaultValue?: Y[]\n /**\n * If `true`, input elements will receive `checked` attribute instead of `isChecked`.\n *\n * This assumes, you're using native radio inputs.\n *\n * @default false\n *\n * @deprecated It will be deprecated in version 2.0.\n */\n isNative?: boolean\n /**\n * The value of the checkbox group.\n */\n value?: Y[]\n /**\n * The callback fired when any children checkbox is checked or unchecked.\n */\n onChange?: (value: Y[]) => void\n}\n\nexport const useCheckboxGroup = <\n Y extends number | string,\n M extends Dict = Dict,\n>({\n defaultValue = [],\n isNative,\n value: valueProp,\n onChange: onChangeProp,\n ...props\n}: M & UseCheckboxGroupProps<Y>) => {\n const onChangeRef = useCallbackRef(onChangeProp)\n\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeRef,\n })\n\n const onChange = useCallback(\n (evOrValue: ChangeEvent<HTMLInputElement> | Y) => {\n const isChecked = isEvent(evOrValue)\n ? evOrValue.target.checked\n : !value.includes(evOrValue)\n\n const selectedValue = (\n isEvent(evOrValue) ? evOrValue.target.value : evOrValue\n ) as Y\n\n const nextValue = isChecked\n ? [...value, selectedValue]\n : value.filter((v) => String(v) !== String(selectedValue))\n\n setValue(nextValue)\n },\n [value, setValue],\n )\n\n const getContainerProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n role: \"group\",\n ...props,\n ref,\n }),\n [],\n )\n\n const getCheckboxProps: PropGetter<\n { value?: Y },\n { checked?: boolean; isChecked?: boolean; value?: Y }\n > = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n [isNative ? \"checked\" : \"isChecked\"]: value.some(\n (val) => String(props.value) === String(val),\n ),\n onChange,\n }),\n [onChange, isNative, value],\n )\n\n return {\n props,\n setValue,\n value,\n getCheckboxProps,\n getContainerProps,\n onChange,\n }\n}\n\nexport type UseCheckboxGroupReturn<Y extends number | string = string> =\n ReturnType<typeof useCheckboxGroup<Y>>\n"],"mappings":";;;AAIA,SAAS,4BAA4B;AACrC,SAAS,UAAU,sBAAsB;AACzC,SAAS,mBAAmB;AAO5B,IAAM,UAAU,CAAC,UACf,SAAS,SAAS,KAAK,KAAK,SAAS,MAAM,MAAM;AA2B5C,IAAM,mBAAmB,CAG9B;AAAA,EACA,eAAe,CAAC;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,MAAoC;AAClC,QAAM,cAAc,eAAe,YAAY;AAE/C,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,WAAW;AAAA,IACf,CAAC,cAAiD;AAChD,YAAM,YAAY,QAAQ,SAAS,IAC/B,UAAU,OAAO,UACjB,CAAC,MAAM,SAAS,SAAS;AAE7B,YAAM,gBACJ,QAAQ,SAAS,IAAI,UAAU,OAAO,QAAQ;AAGhD,YAAM,YAAY,YACd,CAAC,GAAG,OAAO,aAAa,IACxB,MAAM,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,OAAO,aAAa,CAAC;AAE3D,eAAS,SAAS;AAAA,IACpB;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAClB;AAEA,QAAM,oBAAgC;AAAA,IACpC,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B,MAAM;AAAA,MACN,GAAGA;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,mBAGF;AAAA,IACF,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B,GAAGA;AAAA,MACH;AAAA,MACA,CAAC,WAAW,YAAY,WAAW,GAAG,MAAM;AAAA,QAC1C,CAAC,QAAQ,OAAOA,OAAM,KAAK,MAAM,OAAO,GAAG;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,KAAK;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}
|
package/dist/index.js
CHANGED
|
@@ -67,10 +67,13 @@ var useCheckbox = ({
|
|
|
67
67
|
}) => {
|
|
68
68
|
const uuid = (0, import_react.useId)();
|
|
69
69
|
id != null ? id : id = uuid;
|
|
70
|
-
|
|
70
|
+
let {
|
|
71
71
|
id: _id,
|
|
72
72
|
name,
|
|
73
|
+
checked: checkedProp,
|
|
74
|
+
defaultChecked,
|
|
73
75
|
defaultIsChecked,
|
|
76
|
+
indeterminate,
|
|
74
77
|
isChecked: isCheckedProp,
|
|
75
78
|
isIndeterminate,
|
|
76
79
|
selectOnEnter,
|
|
@@ -79,6 +82,9 @@ var useCheckbox = ({
|
|
|
79
82
|
onChange: onChangeProp,
|
|
80
83
|
...computedProps
|
|
81
84
|
} = (0, import_form_control.useFormControlProps)({ id, ...props });
|
|
85
|
+
checkedProp != null ? checkedProp : checkedProp = isCheckedProp;
|
|
86
|
+
indeterminate != null ? indeterminate : indeterminate = isIndeterminate;
|
|
87
|
+
defaultChecked != null ? defaultChecked : defaultChecked = defaultIsChecked;
|
|
82
88
|
const [
|
|
83
89
|
{
|
|
84
90
|
"aria-readonly": _ariaReadonly,
|
|
@@ -91,26 +97,26 @@ var useCheckbox = ({
|
|
|
91
97
|
},
|
|
92
98
|
rest
|
|
93
99
|
] = (0, import_utils2.splitObject)(computedProps, import_form_control.formControlProperties);
|
|
94
|
-
const [
|
|
95
|
-
const [
|
|
96
|
-
const [
|
|
97
|
-
const [
|
|
100
|
+
const [focusVisible, setFocusVisible] = (0, import_react.useState)(false);
|
|
101
|
+
const [focused, setFocused] = (0, import_react.useState)(false);
|
|
102
|
+
const [hovered, setHovered] = (0, import_react.useState)(false);
|
|
103
|
+
const [active, setActive] = (0, import_react.useState)(false);
|
|
98
104
|
const inputRef = (0, import_react.useRef)(null);
|
|
99
|
-
const [
|
|
100
|
-
const [isChecked, setIsChecked] = (0, import_react.useState)(!!
|
|
101
|
-
const
|
|
102
|
-
const checked =
|
|
105
|
+
const [label, setLabel] = (0, import_react.useState)(true);
|
|
106
|
+
const [isChecked, setIsChecked] = (0, import_react.useState)(!!defaultChecked);
|
|
107
|
+
const controlled = checkedProp !== void 0;
|
|
108
|
+
const checked = controlled ? checkedProp : isChecked;
|
|
103
109
|
const onChange = (0, import_utils2.useCallbackRef)(
|
|
104
110
|
(ev) => {
|
|
105
111
|
if (readOnly || disabled) {
|
|
106
112
|
ev.preventDefault();
|
|
107
113
|
return;
|
|
108
114
|
}
|
|
109
|
-
if (!
|
|
110
|
-
setIsChecked(!checked ||
|
|
115
|
+
if (!controlled)
|
|
116
|
+
setIsChecked(!checked || indeterminate ? true : ev.target.checked);
|
|
111
117
|
onChangeProp == null ? void 0 : onChangeProp(ev);
|
|
112
118
|
},
|
|
113
|
-
[readOnly, disabled,
|
|
119
|
+
[readOnly, disabled, controlled, checked, indeterminate]
|
|
114
120
|
);
|
|
115
121
|
const onFocus = (0, import_utils2.useCallbackRef)(onFocusProp);
|
|
116
122
|
const onBlur = (0, import_utils2.useCallbackRef)(onBlurProp);
|
|
@@ -129,7 +135,7 @@ var useCheckbox = ({
|
|
|
129
135
|
[setActive]
|
|
130
136
|
);
|
|
131
137
|
(0, import_react.useEffect)(() => {
|
|
132
|
-
return (0, import_use_focus_visible.trackFocusVisible)(
|
|
138
|
+
return (0, import_use_focus_visible.trackFocusVisible)(setFocusVisible);
|
|
133
139
|
}, []);
|
|
134
140
|
(0, import_utils2.useSafeLayoutEffect)(() => {
|
|
135
141
|
if (inputRef.current)
|
|
@@ -141,7 +147,7 @@ var useCheckbox = ({
|
|
|
141
147
|
(0, import_utils2.useSafeLayoutEffect)(() => {
|
|
142
148
|
var _a;
|
|
143
149
|
if (!((_a = inputRef.current) == null ? void 0 : _a.form)) return;
|
|
144
|
-
inputRef.current.form.onreset = () => setIsChecked(!!
|
|
150
|
+
inputRef.current.form.onreset = () => setIsChecked(!!defaultChecked);
|
|
145
151
|
}, []);
|
|
146
152
|
(0, import_utils2.useSafeLayoutEffect)(() => {
|
|
147
153
|
if (!inputRef.current) return;
|
|
@@ -153,14 +159,14 @@ var useCheckbox = ({
|
|
|
153
159
|
...formControlProps,
|
|
154
160
|
...props2,
|
|
155
161
|
ref: (0, import_utils2.mergeRefs)(ref, (el) => {
|
|
156
|
-
if (el)
|
|
162
|
+
if (el) setLabel(el.tagName === "LABEL");
|
|
157
163
|
}),
|
|
158
164
|
"data-checked": (0, import_utils2.dataAttr)(checked),
|
|
159
|
-
"data-focus": (0, import_utils2.dataAttr)(
|
|
160
|
-
"data-focus-visible": (0, import_utils2.dataAttr)(
|
|
165
|
+
"data-focus": (0, import_utils2.dataAttr)(focused),
|
|
166
|
+
"data-focus-visible": (0, import_utils2.dataAttr)(focused && focusVisible),
|
|
161
167
|
onClick: (0, import_utils2.handlerAll)(props2.onClick, () => {
|
|
162
168
|
var _a;
|
|
163
|
-
if (
|
|
169
|
+
if (label) return;
|
|
164
170
|
(_a = inputRef.current) == null ? void 0 : _a.click();
|
|
165
171
|
requestAnimationFrame(() => {
|
|
166
172
|
var _a2;
|
|
@@ -168,7 +174,7 @@ var useCheckbox = ({
|
|
|
168
174
|
});
|
|
169
175
|
})
|
|
170
176
|
}),
|
|
171
|
-
[checked,
|
|
177
|
+
[checked, label, focused, focusVisible, formControlProps]
|
|
172
178
|
);
|
|
173
179
|
const getIconProps = (0, import_react.useCallback)(
|
|
174
180
|
(props2 = {}, ref = null) => ({
|
|
@@ -176,14 +182,14 @@ var useCheckbox = ({
|
|
|
176
182
|
...props2,
|
|
177
183
|
ref,
|
|
178
184
|
"aria-hidden": true,
|
|
179
|
-
"data-active": (0, import_utils2.dataAttr)(
|
|
185
|
+
"data-active": (0, import_utils2.dataAttr)(active),
|
|
180
186
|
"data-checked": (0, import_utils2.dataAttr)(checked),
|
|
181
|
-
"data-focus": (0, import_utils2.dataAttr)(
|
|
182
|
-
"data-focus-visible": (0, import_utils2.dataAttr)(
|
|
183
|
-
"data-hover": (0, import_utils2.dataAttr)(
|
|
184
|
-
"data-indeterminate": (0, import_utils2.dataAttr)(
|
|
187
|
+
"data-focus": (0, import_utils2.dataAttr)(focused),
|
|
188
|
+
"data-focus-visible": (0, import_utils2.dataAttr)(focused && focusVisible),
|
|
189
|
+
"data-hover": (0, import_utils2.dataAttr)(hovered),
|
|
190
|
+
"data-indeterminate": (0, import_utils2.dataAttr)(indeterminate),
|
|
185
191
|
onMouseDown: (0, import_utils2.handlerAll)(props2.onMouseDown, (ev) => {
|
|
186
|
-
if (
|
|
192
|
+
if (focused) ev.preventDefault();
|
|
187
193
|
setActive(true);
|
|
188
194
|
}),
|
|
189
195
|
onMouseEnter: (0, import_utils2.handlerAll)(props2.onMouseEnter, () => setHovered(true)),
|
|
@@ -191,12 +197,12 @@ var useCheckbox = ({
|
|
|
191
197
|
onMouseUp: (0, import_utils2.handlerAll)(props2.onMouseUp, () => setActive(false))
|
|
192
198
|
}),
|
|
193
199
|
[
|
|
194
|
-
|
|
200
|
+
active,
|
|
195
201
|
checked,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
202
|
+
focused,
|
|
203
|
+
hovered,
|
|
204
|
+
focusVisible,
|
|
205
|
+
indeterminate,
|
|
200
206
|
formControlProps
|
|
201
207
|
]
|
|
202
208
|
);
|
|
@@ -219,7 +225,7 @@ var useCheckbox = ({
|
|
|
219
225
|
whiteSpace: "nowrap",
|
|
220
226
|
width: "1px"
|
|
221
227
|
},
|
|
222
|
-
"aria-checked":
|
|
228
|
+
"aria-checked": indeterminate ? "mixed" : checked,
|
|
223
229
|
checked,
|
|
224
230
|
disabled,
|
|
225
231
|
readOnly,
|
|
@@ -233,7 +239,7 @@ var useCheckbox = ({
|
|
|
233
239
|
onKeyUp: (0, import_utils2.handlerAll)(props2.onKeyUp, onKeyUp)
|
|
234
240
|
}),
|
|
235
241
|
[
|
|
236
|
-
|
|
242
|
+
indeterminate,
|
|
237
243
|
formControlProps,
|
|
238
244
|
id,
|
|
239
245
|
name,
|
|
@@ -268,11 +274,35 @@ var useCheckbox = ({
|
|
|
268
274
|
[checked, formControlProps]
|
|
269
275
|
);
|
|
270
276
|
return {
|
|
271
|
-
|
|
277
|
+
active,
|
|
278
|
+
checked,
|
|
279
|
+
focused,
|
|
280
|
+
focusVisible,
|
|
281
|
+
hovered,
|
|
282
|
+
indeterminate,
|
|
283
|
+
/**
|
|
284
|
+
* @deprecated Use `active` instead.
|
|
285
|
+
*/
|
|
286
|
+
isActive: active,
|
|
287
|
+
/**
|
|
288
|
+
* @deprecated Use `checked` instead.
|
|
289
|
+
*/
|
|
272
290
|
isChecked: checked,
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
291
|
+
/**
|
|
292
|
+
* @deprecated Use `focused` instead.
|
|
293
|
+
*/
|
|
294
|
+
isFocused: focused,
|
|
295
|
+
/**
|
|
296
|
+
* @deprecated Use `focusVisible` instead.
|
|
297
|
+
*/
|
|
298
|
+
isFocusVisible: focusVisible,
|
|
299
|
+
/**
|
|
300
|
+
* @deprecated Use `hovered` instead.
|
|
301
|
+
*/
|
|
302
|
+
isHovered: hovered,
|
|
303
|
+
/**
|
|
304
|
+
* @deprecated Use `indeterminate` instead.
|
|
305
|
+
*/
|
|
276
306
|
isIndeterminate,
|
|
277
307
|
props: rest,
|
|
278
308
|
getContainerProps,
|
|
@@ -311,8 +341,8 @@ var Checkbox = (0, import_react2.forwardRef)(
|
|
|
311
341
|
const isCheckedProp = groupValue && computedProps.value ? groupValue.includes(computedProps.value) : computedProps.isChecked;
|
|
312
342
|
const onChange = groupProps.onChange && computedProps.value ? (0, import_utils3.funcAll)(groupProps.onChange, computedProps.onChange) : computedProps.onChange;
|
|
313
343
|
const {
|
|
314
|
-
|
|
315
|
-
|
|
344
|
+
checked,
|
|
345
|
+
indeterminate,
|
|
316
346
|
props: rest,
|
|
317
347
|
getContainerProps,
|
|
318
348
|
getIconProps,
|
|
@@ -329,15 +359,15 @@ var Checkbox = (0, import_react2.forwardRef)(
|
|
|
329
359
|
});
|
|
330
360
|
const { children: customIcon, ...resolvedIconProps } = { ...iconProps };
|
|
331
361
|
const icon = (0, import_react2.cloneElement)(customIcon != null ? customIcon : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckboxIcon, {}), {
|
|
332
|
-
|
|
362
|
+
checked,
|
|
363
|
+
indeterminate,
|
|
333
364
|
isDisabled,
|
|
334
|
-
isIndeterminate,
|
|
335
365
|
isInvalid,
|
|
336
366
|
isReadOnly,
|
|
337
367
|
isRequired,
|
|
338
368
|
__css: {
|
|
339
|
-
opacity:
|
|
340
|
-
transform:
|
|
369
|
+
opacity: checked || indeterminate ? 1 : 0,
|
|
370
|
+
transform: checked || indeterminate ? "scale(1)" : "scale(0.95)",
|
|
341
371
|
transitionDuration: "normal",
|
|
342
372
|
transitionProperty: "transform"
|
|
343
373
|
}
|
|
@@ -396,6 +426,8 @@ var Checkbox = (0, import_react2.forwardRef)(
|
|
|
396
426
|
Checkbox.displayName = "Checkbox";
|
|
397
427
|
Checkbox.__ui__ = "Checkbox";
|
|
398
428
|
var CheckboxIcon = ({
|
|
429
|
+
checked,
|
|
430
|
+
indeterminate,
|
|
399
431
|
isChecked,
|
|
400
432
|
isDisabled: _isDisabled,
|
|
401
433
|
isIndeterminate,
|
|
@@ -404,7 +436,9 @@ var CheckboxIcon = ({
|
|
|
404
436
|
isRequired: _isRequired,
|
|
405
437
|
...rest
|
|
406
438
|
}) => {
|
|
407
|
-
|
|
439
|
+
checked != null ? checked : checked = isChecked;
|
|
440
|
+
indeterminate != null ? indeterminate : indeterminate = isIndeterminate;
|
|
441
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_motion.AnimatePresence, { initial: false, children: indeterminate || checked ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
408
442
|
import_core.ui.div,
|
|
409
443
|
{
|
|
410
444
|
__css: {
|
|
@@ -428,7 +462,7 @@ var CheckboxIcon = ({
|
|
|
428
462
|
checked: { scale: 1 },
|
|
429
463
|
unchecked: { scale: 0.5 }
|
|
430
464
|
},
|
|
431
|
-
children:
|
|
465
|
+
children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckboxIndeterminateIcon, { ...rest }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckboxCheckIcon, { ...rest })
|
|
432
466
|
}
|
|
433
467
|
)
|
|
434
468
|
}
|