@ariakit/react-core
Version:
Ariakit React core
149 lines (124 loc) • 4.23 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _YOCJTLRXcjs = require('./YOCJTLRX.cjs');
var _DYMTSYDCcjs = require('./DYMTSYDC.cjs');
var _EMYYI4CZcjs = require('./EMYYI4CZ.cjs');
var _WBFXWJUHcjs = require('./WBFXWJUH.cjs');
var _MZ2HG624cjs = require('./MZ2HG624.cjs');
// src/radio/radio.tsx
var _misc = require('@ariakit/core/utils/misc');
var _react = require('react');
var TagName = "input";
function getIsChecked(value, storeValue) {
if (storeValue === void 0) return;
if (value != null && storeValue != null) {
return storeValue === value;
}
return !!storeValue;
}
function isNativeRadio(tagName, type) {
return tagName === "input" && (!type || type === "radio");
}
var useRadio = _WBFXWJUHcjs.createHook.call(void 0, function useRadio2({
store,
name,
value,
checked,
...props
}) {
const context = _YOCJTLRXcjs.useRadioContext.call(void 0, );
store = store || context;
const id = _MZ2HG624cjs.useId.call(void 0, props.id);
const ref = _react.useRef.call(void 0, null);
const isChecked = _EMYYI4CZcjs.useStoreState.call(void 0,
store,
(state) => checked != null ? checked : getIsChecked(value, state == null ? void 0 : state.value)
);
_react.useEffect.call(void 0, () => {
if (!id) return;
if (!isChecked) return;
const isActiveItem = (store == null ? void 0 : store.getState().activeId) === id;
if (isActiveItem) return;
store == null ? void 0 : store.setActiveId(id);
}, [store, isChecked, id]);
const onChangeProp = props.onChange;
const tagName = _MZ2HG624cjs.useTagName.call(void 0, ref, TagName);
const nativeRadio = isNativeRadio(tagName, props.type);
const disabled = _misc.disabledFromProps.call(void 0, props);
const [propertyUpdated, schedulePropertyUpdate] = _MZ2HG624cjs.useForceUpdate.call(void 0, );
_react.useEffect.call(void 0, () => {
const element = ref.current;
if (!element) return;
if (nativeRadio) return;
if (isChecked !== void 0) {
element.checked = isChecked;
}
if (name !== void 0) {
element.name = name;
}
if (value !== void 0) {
element.value = `${value}`;
}
}, [propertyUpdated, nativeRadio, isChecked, name, value]);
const onChange = _MZ2HG624cjs.useEvent.call(void 0, (event) => {
if (disabled) {
event.preventDefault();
event.stopPropagation();
return;
}
if ((store == null ? void 0 : store.getState().value) === value) return;
if (!nativeRadio) {
event.currentTarget.checked = true;
schedulePropertyUpdate();
}
onChangeProp == null ? void 0 : onChangeProp(event);
if (event.defaultPrevented) return;
store == null ? void 0 : store.setValue(value);
});
const onClickProp = props.onClick;
const onClick = _MZ2HG624cjs.useEvent.call(void 0, (event) => {
onClickProp == null ? void 0 : onClickProp(event);
if (event.defaultPrevented) return;
if (nativeRadio) return;
onChange(event);
});
const onFocusProp = props.onFocus;
const onFocus = _MZ2HG624cjs.useEvent.call(void 0, (event) => {
onFocusProp == null ? void 0 : onFocusProp(event);
if (event.defaultPrevented) return;
if (!nativeRadio) return;
if (!store) return;
const { moves, activeId } = store.getState();
if (!moves) return;
if (id && activeId !== id) return;
onChange(event);
});
props = {
id,
role: !nativeRadio ? "radio" : void 0,
type: nativeRadio ? "radio" : void 0,
"aria-checked": isChecked,
...props,
ref: _MZ2HG624cjs.useMergeRefs.call(void 0, ref, props.ref),
onChange,
onClick,
onFocus
};
props = _DYMTSYDCcjs.useCompositeItem.call(void 0, {
store,
clickOnEnter: !nativeRadio,
...props
});
return _misc.removeUndefinedValues.call(void 0, {
name: nativeRadio ? name : void 0,
value: nativeRadio ? value : void 0,
checked: isChecked,
...props
});
});
var Radio = _WBFXWJUHcjs.memo.call(void 0,
_WBFXWJUHcjs.forwardRef.call(void 0, function Radio2(props) {
const htmlProps = useRadio(props);
return _WBFXWJUHcjs.createElement.call(void 0, TagName, htmlProps);
})
);
exports.useRadio = useRadio; exports.Radio = Radio;