@refraction-ui/react 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10940,7 +10940,7 @@ var selectContentVariants = cva({
10940
10940
  }
10941
10941
  });
10942
10942
  var selectItemVariants = cva({
10943
- base: "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
10943
+ base: "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
10944
10944
  variants: {
10945
10945
  selected: {
10946
10946
  true: "bg-accent/50",
@@ -11054,8 +11054,47 @@ var SelectTrigger = React41.forwardRef(
11054
11054
  );
11055
11055
  SelectTrigger.displayName = "SelectTrigger";
11056
11056
  var SelectContent = React41.forwardRef(
11057
- ({ className, children, ...props }, ref) => {
11058
- const { open, contentId, triggerId } = React41.useContext(SelectContext);
11057
+ ({ className, children, ...props }, forwardedRef) => {
11058
+ const { open, contentId, triggerId, setOpen } = React41.useContext(SelectContext);
11059
+ const containerRef = React41.useRef(null);
11060
+ const ref = React41.useCallback(
11061
+ (node) => {
11062
+ containerRef.current = node;
11063
+ if (typeof forwardedRef === "function") forwardedRef(node);
11064
+ else if (forwardedRef) forwardedRef.current = node;
11065
+ },
11066
+ [forwardedRef]
11067
+ );
11068
+ React41.useEffect(() => {
11069
+ if (open && containerRef.current) {
11070
+ const firstOption = containerRef.current.querySelector('[role="option"]:not([aria-disabled="true"])');
11071
+ if (firstOption) {
11072
+ setTimeout(() => firstOption.focus(), 0);
11073
+ }
11074
+ }
11075
+ }, [open]);
11076
+ const handleKeyDown = (e) => {
11077
+ if (!containerRef.current) return;
11078
+ const options = Array.from(
11079
+ containerRef.current.querySelectorAll('[role="option"]:not([aria-disabled="true"])')
11080
+ );
11081
+ if (!options.length) return;
11082
+ const currentIndex = options.indexOf(document.activeElement);
11083
+ if (e.key === "ArrowDown") {
11084
+ e.preventDefault();
11085
+ const nextIndex = currentIndex < options.length - 1 ? currentIndex + 1 : 0;
11086
+ options[nextIndex]?.focus();
11087
+ } else if (e.key === "ArrowUp") {
11088
+ e.preventDefault();
11089
+ const prevIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;
11090
+ options[prevIndex]?.focus();
11091
+ } else if (e.key === "Escape") {
11092
+ e.preventDefault();
11093
+ setOpen(false);
11094
+ const trigger = document.getElementById(triggerId);
11095
+ if (trigger) trigger.focus();
11096
+ }
11097
+ };
11059
11098
  if (!open) return null;
11060
11099
  return /* @__PURE__ */ jsx(
11061
11100
  "div",
@@ -11066,6 +11105,8 @@ var SelectContent = React41.forwardRef(
11066
11105
  role: "listbox",
11067
11106
  "aria-labelledby": triggerId,
11068
11107
  "data-state": open ? "open" : "closed",
11108
+ onKeyDown: handleKeyDown,
11109
+ tabIndex: -1,
11069
11110
  ...props,
11070
11111
  children
11071
11112
  }
@@ -11075,12 +11116,14 @@ var SelectContent = React41.forwardRef(
11075
11116
  SelectContent.displayName = "SelectContent";
11076
11117
  var SelectItem = React41.forwardRef(
11077
11118
  ({ className, children, value: itemValue, disabled: itemDisabled = false, ...props }, ref) => {
11078
- const { value, onValueChange, setOpen } = React41.useContext(SelectContext);
11119
+ const { value, onValueChange, setOpen, triggerId } = React41.useContext(SelectContext);
11079
11120
  const isSelected = value === itemValue;
11080
11121
  const handleClick = () => {
11081
11122
  if (!itemDisabled) {
11082
11123
  onValueChange(itemValue);
11083
11124
  setOpen(false);
11125
+ const trigger = document.getElementById(triggerId);
11126
+ if (trigger) setTimeout(() => trigger.focus(), 0);
11084
11127
  }
11085
11128
  };
11086
11129
  const handleKeyDown = (e) => {
@@ -11088,6 +11131,8 @@ var SelectItem = React41.forwardRef(
11088
11131
  e.preventDefault();
11089
11132
  onValueChange(itemValue);
11090
11133
  setOpen(false);
11134
+ const trigger = document.getElementById(triggerId);
11135
+ if (trigger) setTimeout(() => trigger.focus(), 0);
11091
11136
  }
11092
11137
  };
11093
11138
  return /* @__PURE__ */ jsxs(