@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
52 lines (48 loc) • 2.39 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_ref = require('../../utils/ref.cjs');
const require_utils_index = require('../../utils/index.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
//#region src/hooks/use-controllable-state/index.ts
function useControllableState({ defaultValue: defaultValueProp, value, onChange: onChangeProp, onUpdate: onUpdateProp = (prev, next) => prev !== next }) {
const onChange = require_ref.useCallbackRef(onChangeProp);
const onUpdate = require_ref.useCallbackRef(onUpdateProp);
const [defaultValue, setDefaultValue] = (0, react.useState)(defaultValueProp);
const controlled = !(0, require_utils_index.utils_exports.isUndefined)(value);
const currentValue = controlled ? value : defaultValue;
return [currentValue, require_ref.useCallbackRef((next) => {
const nextValue = (0, require_utils_index.utils_exports.runIfFn)(next, currentValue);
if (!onUpdate(currentValue, nextValue)) return;
if (!controlled || (0, require_utils_index.utils_exports.isUndefined)(nextValue) || (0, require_utils_index.utils_exports.isNull)(nextValue)) setDefaultValue(nextValue);
onChange(nextValue);
}, [
controlled,
currentValue,
onChange,
onUpdate
])];
}
function isHTMLInputElement(el) {
return el instanceof HTMLInputElement;
}
function useControllableEventState({ defaultValue: defaultValueProp, value, onChange: onChangeProp }) {
const onChange = require_ref.useCallbackRef(onChangeProp);
const [defaultValue, setDefaultValue] = (0, react.useState)(defaultValueProp);
const controlled = !(0, require_utils_index.utils_exports.isUndefined)(value);
const currentValue = controlled ? value : defaultValue;
const boolean = (0, require_utils_index.utils_exports.isBoolean)(currentValue);
return [currentValue, require_ref.useCallbackRef((ev) => {
const value$1 = boolean && isHTMLInputElement(ev.target) ? ev.target.checked : ev.target.value;
if (!controlled || (0, require_utils_index.utils_exports.isUndefined)(value$1) || (0, require_utils_index.utils_exports.isNull)(value$1)) setDefaultValue(value$1);
onChange(ev);
}, [
controlled,
currentValue,
onChange
])];
}
//#endregion
exports.useControllableEventState = useControllableEventState;
exports.useControllableState = useControllableState;
//# sourceMappingURL=index.cjs.map