@saas-ui/command-bar
Version:
Chakra UI CommandBar Component
232 lines (228 loc) • 5.93 kB
JavaScript
'use client'
import {
commandBarTheme
} from "./chunk-PAAYRCJD.mjs";
// src/command-bar.tsx
import {
chakra,
forwardRef,
useMultiStyleConfig,
Modal,
ModalContent,
ModalOverlay,
useTheme
} from "@chakra-ui/react";
// src/command-bar-context.ts
import {
useDisclosure
} from "@chakra-ui/react";
import { callAllHandlers, createContext } from "@chakra-ui/utils";
import { useCallback } from "react";
var [CommandBarStylesProvider, useCommandBarStyles] = createContext({
name: "CommandBarStylesProvider"
});
var [CommandBarProvider, useCommandBarContext] = createContext({
name: "CommandBarProvider"
});
var useCommandBar = (props) => {
const {
shouldFilter = true,
onFilter,
value,
onChange,
onSelect,
isOpen: isOpenProp,
onClose: onCloseProp,
closeOnSelect,
size
} = props;
const { isOpen, onClose } = useDisclosure({
isOpen: isOpenProp,
onClose: onCloseProp
});
const getCommandProps = useCallback(
(props2) => {
return {
shouldFilter,
filter: onFilter,
value,
onValueChange: onChange,
...props2
};
},
[shouldFilter, onFilter, value, onChange]
);
const getItemProps = useCallback(
(props2) => {
const { isDisabled, onSelect: onSelectProp, ...rest } = props2;
return {
...rest,
disabled: isDisabled,
onSelect: callAllHandlers(onSelectProp, onSelect, () => {
if (closeOnSelect) {
onClose();
}
})
};
},
[onSelect, closeOnSelect, onClose]
);
const getDialogProps = useCallback(
(props2) => {
return {
isOpen,
onClose: callAllHandlers(props2 == null ? void 0 : props2.onClose, onClose),
size,
...props2
};
},
[isOpen, onClose]
);
return {
getCommandProps,
getItemProps,
getDialogProps
};
};
// src/command-bar.tsx
import { cx } from "@chakra-ui/utils";
import {
CommandRoot,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
CommandLoading,
CommandSeparator
} from "cmdk";
import { jsx, jsxs } from "react/jsx-runtime";
function cmdkFactory(Component, key) {
const StyledComponent = chakra(Component);
return forwardRef((props, ref) => {
const styles = useCommandBarStyles();
const componentStyles = {
...styles[key]
};
return /* @__PURE__ */ jsx(
StyledComponent,
{
ref,
...props,
__css: componentStyles,
className: cx(`sui-command-bar__${key}`, props.className)
}
);
});
}
var StyledCommand = chakra(CommandRoot);
var StyledInput = chakra(CommandInput);
var StyledItem = chakra(CommandItem);
var CommandBarList = cmdkFactory(CommandList, "list");
var CommandBarLoading = cmdkFactory(CommandLoading, "loading");
var CommandBarEmpty = cmdkFactory(CommandEmpty, "empty");
var CommandBarSeparator = cmdkFactory(CommandSeparator, "separator");
var CommandBarGroup = cmdkFactory(CommandGroup, "group");
var CommandBar = (props) => {
var _a;
const theme = useTheme();
const styleConfig = (_a = theme.components["SuiCommandBar"]) != null ? _a : commandBarTheme;
const styles = useMultiStyleConfig("SuiCommandBar", {
styleConfig,
...props
});
const context = useCommandBar(props);
return /* @__PURE__ */ jsx(CommandBarProvider, { value: context, children: /* @__PURE__ */ jsx(CommandBarStylesProvider, { value: styles, children: props.children }) });
};
CommandBar.displayName = "CommandBar";
var CommandBarContent = forwardRef(
(props, ref) => {
const styles = useCommandBarStyles();
const containerStyles = {
...styles.container
};
const { getCommandProps } = useCommandBarContext();
return /* @__PURE__ */ jsx(
StyledCommand,
{
ref,
...props,
...getCommandProps(props),
__css: containerStyles,
className: cx("sui-command-bar", props.className)
}
);
}
);
CommandBarContent.displayName = "CommandBarContent";
var CommandBarInput = forwardRef(
(props, ref) => {
const { onChange, value, ...rest } = props;
const styles = useCommandBarStyles();
const inputStyles = {
...styles.input
};
return /* @__PURE__ */ jsx(
StyledInput,
{
ref,
value,
onValueChange: onChange,
...rest,
__css: inputStyles,
className: cx("sui-command-bar__input", props.className)
}
);
}
);
CommandBarInput.displayName = "CommandBarInput";
var CommandBarItem = forwardRef(
(props, ref) => {
const styles = useCommandBarStyles();
const itemStyles = {
...styles.item
};
const { getItemProps } = useCommandBarContext();
return /* @__PURE__ */ jsx(
StyledItem,
{
ref,
...getItemProps(props),
__css: itemStyles,
className: cx("sui-command-bar__item", props.className)
}
);
}
);
CommandBarItem.displayName = "CommandBarItem";
var CommandBarDialog = forwardRef(
(props, ref) => {
const { children, contentProps, overlay, ...rest } = props;
const { getDialogProps } = useCommandBarContext();
return /* @__PURE__ */ jsxs(Modal, { scrollBehavior: "inside", ...getDialogProps(rest), children: [
overlay && /* @__PURE__ */ jsx(CommandBarOverlay, {}),
/* @__PURE__ */ jsx(ModalContent, { ref, bg: "transparent", ...contentProps, children })
] });
}
);
CommandBarDialog.displayName = "CommandBarDialog";
var CommandBarOverlay = ModalOverlay;
// src/index.ts
import { useCommandState } from "cmdk";
export {
CommandBar,
CommandBarContent,
CommandBarDialog,
CommandBarEmpty,
CommandBarGroup,
CommandBarInput,
CommandBarItem,
CommandBarList,
CommandBarLoading,
CommandBarSeparator,
useCommandBar,
useCommandBarContext,
useCommandBarStyles,
useCommandState
};
//# sourceMappingURL=index.mjs.map