@ariakit/react-core
Version:
Ariakit React core
151 lines (126 loc) • 4.41 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _GPGAUVKKcjs = require('./GPGAUVKK.cjs');
var _DX5OUXRCcjs = require('./DX5OUXRC.cjs');
var _RDNUVX4Vcjs = require('./RDNUVX4V.cjs');
var _SQLDFLTEcjs = require('./SQLDFLTE.cjs');
var _4KGS3DOWcjs = require('./4KGS3DOW.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 = _SQLDFLTEcjs.createHook.call(void 0, function useRadio2({
store,
name: nameProp,
value,
checked,
...props
}) {
const context = _GPGAUVKKcjs.useRadioContext.call(void 0, );
store = store || context;
const id = _4KGS3DOWcjs.useId.call(void 0, props.id);
const ref = _react.useRef.call(void 0, null);
const isChecked = _RDNUVX4Vcjs.useStoreState.call(void 0,
store,
(state) => checked != null ? checked : getIsChecked(value, state == null ? void 0 : state.value)
);
const storeId = _RDNUVX4Vcjs.useStoreState.call(void 0, store, (state) => state == null ? void 0 : state.id);
const name = nameProp != null ? nameProp : storeId;
_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 = _4KGS3DOWcjs.useTagName.call(void 0, ref, TagName);
const nativeRadio = isNativeRadio(tagName, props.type);
const disabled = _misc.disabledFromProps.call(void 0, props);
const [propertyUpdated, schedulePropertyUpdate] = _4KGS3DOWcjs.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 = _4KGS3DOWcjs.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 = _4KGS3DOWcjs.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 = _4KGS3DOWcjs.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 = {
role: !nativeRadio ? "radio" : void 0,
type: nativeRadio ? "radio" : void 0,
"aria-checked": isChecked,
...props,
id,
ref: _4KGS3DOWcjs.useMergeRefs.call(void 0, ref, props.ref),
onChange,
onClick,
onFocus
};
props = _DX5OUXRCcjs.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 = _SQLDFLTEcjs.memo.call(void 0,
_SQLDFLTEcjs.forwardRef.call(void 0, function Radio2(props) {
const htmlProps = useRadio(props);
return _SQLDFLTEcjs.createElement.call(void 0, TagName, htmlProps);
})
);
exports.useRadio = useRadio; exports.Radio = Radio;