@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
137 lines (133 loc) • 4.62 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_context = require('../../utils/context.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);
let react_resizable_panels = require("react-resizable-panels");
react_resizable_panels = require_rolldown_runtime.__toESM(react_resizable_panels);
//#region src/components/resizable/use-resizable.ts
const [ResizableContext, useResizableContext] = require_context.createContext({ name: "ResizableContext" });
const useResizable = ({ id, ref, controlRef: controlRefProp, disabled, keyboardStep, orientation = "horizontal", storage, storageKey, groupProps = {}, onLayout,...rest } = {}) => {
const controlRef = (0, react.useRef)(null);
const uuid = (0, react.useId)();
id ??= uuid;
const getRootProps = (0, react.useCallback)((props = {}) => ({
...rest,
...props
}), [rest]);
const getGroupProps = (0, react.useCallback)(({ ref: ref$1,...props } = {}) => ({
id,
autoSaveId: storageKey,
direction: orientation,
keyboardResizeBy: keyboardStep,
storage,
...groupProps,
...props,
ref: require_ref.mergeRefs(ref$1, controlRefProp, controlRef),
tagName: props.as ?? groupProps.as,
onLayout: (0, require_utils_index.utils_exports.fnAll)(props.onLayout, groupProps.onLayout, onLayout)
}), [
id,
orientation,
groupProps,
controlRefProp,
storageKey,
keyboardStep,
onLayout,
storage
]);
(0, react.useLayoutEffect)(() => {
require_ref.assignRef(ref, (0, react_resizable_panels.getPanelGroupElement)(id));
}, [ref, id]);
return {
controlRef,
disabled,
orientation,
getGroupProps,
getRootProps
};
};
const useResizableItem = ({ id, ref, as, controlRef, onCollapse, onExpand, onResize,...rest }) => {
const uuid = (0, react.useId)();
id ??= uuid;
const getItemProps = (0, react.useCallback)(({ ref: ref$1,...props } = {}) => ({
id,
ref: require_ref.mergeRefs(ref$1, controlRef),
tagName: props.as ?? as,
...props,
...rest,
onCollapse: (0, require_utils_index.utils_exports.fnAll)(props.onCollapse, onCollapse),
onExpand: (0, require_utils_index.utils_exports.fnAll)(props.onExpand, onExpand),
onResize: (0, require_utils_index.utils_exports.fnAll)(props.onResize, onResize)
}), [
as,
controlRef,
id,
onCollapse,
onExpand,
onResize,
rest
]);
(0, react.useLayoutEffect)(() => {
require_ref.assignRef(ref, (0, react_resizable_panels.getPanelElement)(id));
}, [ref, id]);
return { getItemProps };
};
const useResizableTrigger = ({ id, ref, as, disabled, onDragging,...rest }) => {
const uuid = (0, react.useId)();
const { controlRef, disabled: groupDisabled, orientation } = useResizableContext();
const [active, setActive] = (0, react.useState)(false);
const trulyDisabled = disabled || groupDisabled;
id ??= uuid;
const onDoubleClick = (0, react.useCallback)((ev) => {
ev.preventDefault();
const layout = controlRef.current?.getLayout();
if (!layout) return;
const size = 100 / layout.length;
const nextLayout = layout.map(() => size);
controlRef.current?.setLayout(nextLayout);
}, [controlRef]);
const getTriggerProps = (0, react.useCallback)((props = {}) => ({
id,
"aria-orientation": orientation,
"data-active": (0, require_utils_index.utils_exports.dataAttr)(active),
"data-disabled": (0, require_utils_index.utils_exports.dataAttr)(trulyDisabled),
disabled: trulyDisabled,
tabIndex: trulyDisabled ? -1 : 0,
tagName: props.as ?? as,
...rest,
...props,
onDoubleClick: (0, require_utils_index.utils_exports.handlerAll)(props.onDoubleClick, rest.onDoubleClick, onDoubleClick),
onDragging: (0, require_utils_index.utils_exports.fnAll)(props.onDragging, onDragging, setActive)
}), [
id,
as,
orientation,
trulyDisabled,
rest,
onDoubleClick,
onDragging,
active
]);
const getIconProps = (0, react.useCallback)((props = {}) => ({
"data-active": (0, require_utils_index.utils_exports.dataAttr)(active),
"data-icon": "",
...props
}), [active]);
(0, react.useLayoutEffect)(() => {
require_ref.assignRef(ref, (0, react_resizable_panels.getResizeHandleElement)(id));
}, [ref, id]);
return {
getIconProps,
getTriggerProps
};
};
//#endregion
exports.ResizableContext = ResizableContext;
exports.useResizable = useResizable;
exports.useResizableContext = useResizableContext;
exports.useResizableItem = useResizableItem;
exports.useResizableTrigger = useResizableTrigger;
//# sourceMappingURL=use-resizable.cjs.map