@refraction-ui/react 0.22.0 → 0.23.1

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.
Files changed (201) hide show
  1. package/dist/{chunk-V24GDHUX.js → chunk-4ACSHPCM.js} +2 -2
  2. package/dist/{chunk-SDAJVXD4.js → chunk-5P56PN3J.js} +2 -2
  3. package/dist/chunk-75BKRTPO.js +417 -0
  4. package/dist/{chunk-2Q6HHFAN.js.map → chunk-75BKRTPO.js.map} +1 -1
  5. package/dist/chunk-7P7EJ56S.js +7 -0
  6. package/dist/{chunk-QPCKJ2YR.js → chunk-GG6MZDGV.js} +2 -2
  7. package/dist/{chunk-QDMLIDYN.js → chunk-GU5MI7FX.js} +2 -2
  8. package/dist/{chunk-3Y2T26QD.js → chunk-JZQ5ZL46.js} +6 -4
  9. package/dist/{chunk-3Y2T26QD.js.map → chunk-JZQ5ZL46.js.map} +2 -2
  10. package/dist/{chunk-RSWOLRIC.js → chunk-KIZD73DK.js} +2 -2
  11. package/dist/{chunk-XMFNBOPO.js → chunk-PY2TIFCT.js} +2 -2
  12. package/dist/{chunk-XWP763SH.js → chunk-V727VZOE.js} +4 -2
  13. package/dist/{chunk-XWP763SH.js.map → chunk-V727VZOE.js.map} +2 -2
  14. package/dist/{chunk-3I3DYDHR.js → chunk-WNLYPQOS.js} +2 -2
  15. package/dist/{chunk-63N4PZUJ.js → chunk-X6HEKRWE.js} +2 -2
  16. package/dist/{chunk-WYKPPK3W.js → chunk-XAJDSVZR.js} +2 -2
  17. package/dist/faro-engine-VIUXJAPH-FSARIABU.js +3 -0
  18. package/dist/{faro-engine-47HGRAQH-JKINJPMH.js.map → faro-engine-VIUXJAPH-FSARIABU.js.map} +1 -1
  19. package/dist/index.cjs +736 -274
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +3 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.js +3 -0
  24. package/dist/internal/avatar/index.d.cts +4 -1
  25. package/dist/internal/avatar/index.d.ts +4 -1
  26. package/dist/internal/data-table/index.d.cts +48 -3
  27. package/dist/internal/data-table/index.d.ts +48 -3
  28. package/dist/internal/line-chart/index.d.ts +17 -3
  29. package/dist/internal/native-select/index.d.ts +21 -0
  30. package/dist/internal/react-avatar/index.d.cts +4 -2
  31. package/dist/internal/react-avatar/index.d.ts +4 -2
  32. package/dist/internal/react-command/index.d.cts +13 -2
  33. package/dist/internal/react-command/index.d.ts +13 -2
  34. package/dist/internal/react-data-table/index.d.cts +27 -9
  35. package/dist/internal/react-data-table/index.d.ts +27 -9
  36. package/dist/internal/react-dialog/index.d.cts +5 -0
  37. package/dist/internal/react-dialog/index.d.ts +5 -0
  38. package/dist/internal/react-dropdown-menu/index.d.cts +19 -1
  39. package/dist/internal/react-dropdown-menu/index.d.ts +19 -1
  40. package/dist/internal/react-line-chart/index.d.ts +7 -2
  41. package/dist/internal/react-native-select/index.d.ts +19 -0
  42. package/dist/internal/react-stat-grid/index.d.ts +22 -11
  43. package/dist/internal/react-table/index.d.ts +39 -0
  44. package/dist/internal/stat-grid/index.d.ts +49 -7
  45. package/dist/internal/table/index.d.ts +46 -0
  46. package/dist/react-accordion.js +1 -1
  47. package/dist/react-action-list.js +1 -1
  48. package/dist/react-ai.js +1 -1
  49. package/dist/react-analytics.js +16 -4
  50. package/dist/react-analytics.js.map +2 -2
  51. package/dist/react-animated-text.js +1 -1
  52. package/dist/react-app-shell.js +1 -1
  53. package/dist/react-audience-feature-card.js +1 -1
  54. package/dist/react-audio-room.js +1 -1
  55. package/dist/react-auth.js +1 -1
  56. package/dist/react-avatar-group.js +1 -1
  57. package/dist/react-avatar.js +13 -9
  58. package/dist/react-avatar.js.map +2 -2
  59. package/dist/react-badge.js +1 -1
  60. package/dist/react-bottom-nav.js +1 -1
  61. package/dist/react-brand-network-cell.js +1 -1
  62. package/dist/react-breadcrumbs.js +1 -1
  63. package/dist/react-browser-chrome-mock.js +1 -1
  64. package/dist/react-button.js +3 -3
  65. package/dist/react-calendar.js +1 -1
  66. package/dist/react-call-controls.js +1 -1
  67. package/dist/react-callout.js +1 -1
  68. package/dist/react-card-grid.js +1 -1
  69. package/dist/react-card.js +1 -1
  70. package/dist/react-carousel.js +1 -1
  71. package/dist/react-charts.js +1 -1
  72. package/dist/react-checkbox.js +1 -1
  73. package/dist/react-checklist.js +1 -1
  74. package/dist/react-code-block.js +1 -1
  75. package/dist/react-code-editor.js +1 -1
  76. package/dist/react-collapsible.js +1 -1
  77. package/dist/react-combobox.js +1 -1
  78. package/dist/react-command-input.js +1 -1
  79. package/dist/react-command.js +115 -70
  80. package/dist/react-command.js.map +3 -3
  81. package/dist/react-composer.js +3 -3
  82. package/dist/react-content-protection.js +1 -1
  83. package/dist/react-conversation.js +5 -5
  84. package/dist/react-cookie-consent.js +1 -1
  85. package/dist/react-data-table.js +125 -114
  86. package/dist/react-data-table.js.map +2 -2
  87. package/dist/react-date-picker.js +1 -1
  88. package/dist/react-device-frame.js +1 -1
  89. package/dist/react-dialog.js +33 -9
  90. package/dist/react-dialog.js.map +2 -2
  91. package/dist/react-diff-viewer.js +1 -1
  92. package/dist/react-dropdown-menu.js +61 -8
  93. package/dist/react-dropdown-menu.js.map +3 -3
  94. package/dist/react-editor-status-bar.js +1 -1
  95. package/dist/react-editor-tabs.js +1 -1
  96. package/dist/react-emoji-picker.js +2 -2
  97. package/dist/react-empty-state.js +1 -1
  98. package/dist/react-feedback-dialog.js +2 -2
  99. package/dist/react-file-tree.js +1 -1
  100. package/dist/react-file-upload.js +1 -1
  101. package/dist/react-floating-reactions.js +1 -1
  102. package/dist/react-flow-editor.js +2 -2
  103. package/dist/react-footer.js +1 -1
  104. package/dist/react-funnel-chart.js +1 -1
  105. package/dist/react-graph-view.js +2 -2
  106. package/dist/react-infinite-canvas.js +2 -2
  107. package/dist/react-inline-editor.js +1 -1
  108. package/dist/react-input-group.js +1 -1
  109. package/dist/react-input.js +2 -2
  110. package/dist/react-install-prompt.js +1 -1
  111. package/dist/react-kanban-board.js +1 -1
  112. package/dist/react-keyboard-shortcut.js +2 -2
  113. package/dist/react-language-selector.js +1 -1
  114. package/dist/react-line-chart.js +49 -11
  115. package/dist/react-line-chart.js.map +2 -2
  116. package/dist/react-link-card.js +1 -1
  117. package/dist/react-live-captions.js +1 -1
  118. package/dist/react-live-cursors.js +1 -1
  119. package/dist/react-live-transcript.js +1 -1
  120. package/dist/react-location-selector.js +1 -1
  121. package/dist/react-logger.js +3 -3
  122. package/dist/react-markdown-renderer.js +2 -2
  123. package/dist/react-marquee-strip.js +1 -1
  124. package/dist/react-mascot.js +1 -1
  125. package/dist/react-mastery-bar.js +1 -1
  126. package/dist/react-mini-map.js +1 -1
  127. package/dist/react-mobile-nav.js +1 -1
  128. package/dist/react-native-select.js +52 -0
  129. package/dist/react-native-select.js.map +7 -0
  130. package/dist/react-navbar.js +1 -1
  131. package/dist/react-numbered-steps.js +1 -1
  132. package/dist/react-otp-input.js +1 -1
  133. package/dist/react-page-header.js +1 -1
  134. package/dist/react-pagination.js +1 -1
  135. package/dist/react-password-input.js +2 -2
  136. package/dist/react-payment.js +1 -1
  137. package/dist/react-popover.js +1 -1
  138. package/dist/react-pre-call-lobby.js +1 -1
  139. package/dist/react-presence-indicator.js +1 -1
  140. package/dist/react-pricing-card.js +1 -1
  141. package/dist/react-progress-display.js +1 -1
  142. package/dist/react-radial-gauge.js +1 -1
  143. package/dist/react-radio.js +1 -1
  144. package/dist/react-rating-scale.js +1 -1
  145. package/dist/react-reaction-bar.js +1 -1
  146. package/dist/react-resizable-layout.js +1 -1
  147. package/dist/react-search-bar.js +1 -1
  148. package/dist/react-section-head.js +1 -1
  149. package/dist/react-segmented-control.js +1 -1
  150. package/dist/react-select.js +1 -1
  151. package/dist/react-separator.js +1 -1
  152. package/dist/react-sheet.js +1 -1
  153. package/dist/react-sidebar.js +1 -1
  154. package/dist/react-skeleton.js +1 -1
  155. package/dist/react-skip-to-content.js +1 -1
  156. package/dist/react-slide-viewer.js +1 -1
  157. package/dist/react-slider.js +1 -1
  158. package/dist/react-slot-picker.js +1 -1
  159. package/dist/react-social-auth-button.js +3 -3
  160. package/dist/react-sortable-list.js +1 -1
  161. package/dist/react-stat-grid.js +91 -22
  162. package/dist/react-stat-grid.js.map +2 -2
  163. package/dist/react-status-indicator.js +1 -1
  164. package/dist/react-steps.js +1 -1
  165. package/dist/react-sticky-note.js +1 -1
  166. package/dist/react-switch.js +1 -1
  167. package/dist/react-table-of-contents.js +1 -1
  168. package/dist/react-table.js +148 -0
  169. package/dist/react-table.js.map +7 -0
  170. package/dist/react-tabs.js +35 -6
  171. package/dist/react-tabs.js.map +2 -2
  172. package/dist/react-terminal.js +1 -1
  173. package/dist/react-test-results.js +1 -1
  174. package/dist/react-textarea.js +1 -1
  175. package/dist/react-thread-view.js +2 -2
  176. package/dist/react-timeline.js +1 -1
  177. package/dist/react-toast.js +1 -1
  178. package/dist/react-tooltip.js +1 -1
  179. package/dist/react-version-selector.js +1 -1
  180. package/dist/react-video-grid.js +2 -2
  181. package/dist/react-video-player.js +1 -1
  182. package/dist/react-video-tile.js +2 -2
  183. package/dist/react-voice-pill.js +1 -1
  184. package/dist/react-waveform.js +1 -1
  185. package/dist/react-wizard.js +1 -1
  186. package/dist/shared.js +53 -0
  187. package/dist/shared.js.map +7 -0
  188. package/package.json +3 -1
  189. package/dist/chunk-2Q6HHFAN.js +0 -164
  190. package/dist/chunk-SDZ3LROZ.js +0 -7
  191. package/dist/faro-engine-47HGRAQH-JKINJPMH.js +0 -3
  192. /package/dist/{chunk-V24GDHUX.js.map → chunk-4ACSHPCM.js.map} +0 -0
  193. /package/dist/{chunk-SDAJVXD4.js.map → chunk-5P56PN3J.js.map} +0 -0
  194. /package/dist/{chunk-SDZ3LROZ.js.map → chunk-7P7EJ56S.js.map} +0 -0
  195. /package/dist/{chunk-QPCKJ2YR.js.map → chunk-GG6MZDGV.js.map} +0 -0
  196. /package/dist/{chunk-QDMLIDYN.js.map → chunk-GU5MI7FX.js.map} +0 -0
  197. /package/dist/{chunk-RSWOLRIC.js.map → chunk-KIZD73DK.js.map} +0 -0
  198. /package/dist/{chunk-XMFNBOPO.js.map → chunk-PY2TIFCT.js.map} +0 -0
  199. /package/dist/{chunk-3I3DYDHR.js.map → chunk-WNLYPQOS.js.map} +0 -0
  200. /package/dist/{chunk-63N4PZUJ.js.map → chunk-X6HEKRWE.js.map} +0 -0
  201. /package/dist/{chunk-WYKPPK3W.js.map → chunk-XAJDSVZR.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-animated-text/dist/index.js
7
7
  import * as React from "react";
@@ -2,7 +2,7 @@ import {
2
2
  cn,
3
3
  devWarn,
4
4
  generateId
5
- } from "./chunk-2Q6HHFAN.js";
5
+ } from "./chunk-75BKRTPO.js";
6
6
 
7
7
  // ../react-app-shell/dist/index.js
8
8
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-audience-feature-card/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-audio-room/dist/index.js
7
7
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  devWarn
3
- } from "./chunk-2Q6HHFAN.js";
3
+ } from "./chunk-75BKRTPO.js";
4
4
 
5
5
  // ../react-auth/dist/index.js
6
6
  import * as React2 from "react";
@@ -2,7 +2,7 @@ import {
2
2
  cn,
3
3
  cva,
4
4
  generateId
5
- } from "./chunk-2Q6HHFAN.js";
5
+ } from "./chunk-75BKRTPO.js";
6
6
 
7
7
  // ../react-avatar-group/dist/index.js
8
8
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-avatar/dist/index.js
7
7
  import * as React from "react";
@@ -15,10 +15,9 @@ function getInitials(name) {
15
15
  }
16
16
  function createAvatar(props = {}) {
17
17
  const { src, alt = "", fallback = "", size = "md" } = props;
18
- const ariaProps = {
19
- role: "img"
20
- };
18
+ const ariaProps = {};
21
19
  if (alt) {
20
+ ariaProps.role = "img";
22
21
  ariaProps["aria-label"] = alt;
23
22
  }
24
23
  const fallbackText = fallback ? getInitials(fallback) : alt ? getInitials(alt) : "";
@@ -48,8 +47,12 @@ var avatarTokens = {
48
47
  }
49
48
  };
50
49
  var avatarVariants = cva({
51
- base: "relative flex shrink-0 overflow-hidden rounded-full",
50
+ base: "relative flex shrink-0 overflow-hidden",
52
51
  variants: {
52
+ shape: {
53
+ circle: "rounded-full",
54
+ square: "rounded-md"
55
+ },
53
56
  size: {
54
57
  xs: "h-6 w-6",
55
58
  sm: "h-8 w-8",
@@ -59,6 +62,7 @@ var avatarVariants = cva({
59
62
  }
60
63
  },
61
64
  defaultVariants: {
65
+ shape: "circle",
62
66
  size: "md"
63
67
  }
64
68
  });
@@ -66,7 +70,7 @@ var avatarImageVariants = cva({
66
70
  base: "aspect-square h-full w-full object-cover"
67
71
  });
68
72
  var avatarFallbackVariants = cva({
69
- base: "flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground",
73
+ base: "flex h-full w-full items-center justify-center rounded-[inherit] bg-muted text-muted-foreground",
70
74
  variants: {
71
75
  size: {
72
76
  xs: "text-xs",
@@ -93,15 +97,15 @@ var AvatarContext = React.createContext({
93
97
  }
94
98
  });
95
99
  var Avatar = React.forwardRef(
96
- function Avatar2({ size = "md", className, children, ...props }, ref) {
100
+ function Avatar2({ size = "md", shape = "circle", className, children, ...props }, ref) {
97
101
  const [imageLoaded, setImageLoaded] = React.useState(false);
98
102
  const [imageError, setImageError] = React.useState(false);
99
- const api = createAvatar({ size });
103
+ const api = createAvatar({ size, alt: props["aria-label"] });
100
104
  return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: { size, imageLoaded, imageError, setImageLoaded, setImageError }, children: /* @__PURE__ */ jsx(
101
105
  "span",
102
106
  {
103
107
  ref,
104
- className: cn(avatarVariants({ size }), className),
108
+ className: cn(avatarVariants({ size, shape }), className),
105
109
  ...api.ariaProps,
106
110
  ...api.dataAttributes,
107
111
  ...props,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../avatar/src/avatar.ts", "../../avatar/src/avatar.styles.ts", "../../react-avatar/src/avatar.tsx"],
4
- "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport type AvatarLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n fallback?: string\n size?: AvatarSize\n}\n\nexport interface AvatarAPI {\n /** ARIA attributes to spread on the root element */\n ariaProps: Partial<AccessibilityProps>\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n /** Image ARIA props */\n imageProps: {\n alt: string\n role: string\n }\n /** Fallback text (initials) */\n fallbackText: string\n /** Current state */\n state: {\n size: AvatarSize\n hasSrc: boolean\n }\n}\n\n/**\n * Extract initials from a name or fallback string.\n * Takes first letter of first two words, uppercased.\n */\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 0 || parts[0] === '') return ''\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n}\n\nexport function createAvatar(props: AvatarProps = {}): AvatarAPI {\n const { src, alt = '', fallback = '', size = 'md' } = props\n\n const ariaProps: Partial<AccessibilityProps> = {\n role: 'img',\n }\n if (alt) {\n ariaProps['aria-label'] = alt\n }\n\n const fallbackText = fallback ? getInitials(fallback) : (alt ? getInitials(alt) : '')\n\n const dataAttributes: Record<string, string> = {\n 'data-slot': 'avatar',\n }\n\n return {\n ariaProps,\n dataAttributes,\n imageProps: {\n alt,\n role: 'img',\n },\n fallbackText,\n state: {\n size,\n hasSrc: !!src,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const avatarTokens: TokenContract = {\n name: 'avatar',\n tokens: {\n bg: { variable: '--rfr-avatar-bg', fallback: 'hsl(var(--muted))' },\n fg: { variable: '--rfr-avatar-fg', fallback: 'hsl(var(--muted-foreground))' },\n border: { variable: '--rfr-avatar-border', fallback: 'hsl(var(--border))' },\n },\n}\n\nexport const avatarVariants = cva({\n base: 'relative flex shrink-0 overflow-hidden rounded-full',\n variants: {\n size: {\n xs: 'h-6 w-6',\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n xl: 'h-16 w-16',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const avatarImageVariants = cva({\n base: 'aspect-square h-full w-full object-cover',\n})\n\nexport const avatarFallbackVariants = cva({\n base: 'flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground',\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n", "import * as React from 'react'\nimport {\n createAvatar,\n avatarVariants,\n avatarImageVariants,\n avatarFallbackVariants,\n type AvatarSize,\n} from '@refraction-ui/avatar'\nimport { cn } from '@refraction-ui/shared'\n\n/* ─── Context ──────────────────────────────────────────────────── */\ninterface AvatarContextValue {\n size: AvatarSize\n imageLoaded: boolean\n imageError: boolean\n setImageLoaded: (loaded: boolean) => void\n setImageError: (error: boolean) => void\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue>({\n size: 'md',\n imageLoaded: false,\n imageError: false,\n setImageLoaded: () => {},\n setImageError: () => {},\n})\n\n/* ─── Avatar (root) ────────────────────────────────────────────── */\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: AvatarSize\n}\n\n/**\n * Avatar -- circular image with fallback support.\n * Compound component: use Avatar > AvatarImage + AvatarFallback.\n */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar({ size = 'md', className, children, ...props }, ref) {\n const [imageLoaded, setImageLoaded] = React.useState(false)\n const [imageError, setImageError] = React.useState(false)\n\n const api = createAvatar({ size })\n\n return (\n <AvatarContext.Provider value={{ size, imageLoaded, imageError, setImageLoaded, setImageError }}>\n <span\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {children}\n </span>\n </AvatarContext.Provider>\n )\n },\n)\n\n/* ─── AvatarImage ──────────────────────────────────────────────── */\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {}\n\nexport const AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n function AvatarImage({ className, src, alt = '', onLoad, onError, ...props }, ref) {\n const { imageError, setImageLoaded, setImageError } = React.useContext(AvatarContext)\n\n React.useEffect(() => {\n setImageLoaded(false)\n setImageError(false)\n }, [src, setImageLoaded, setImageError])\n\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageLoaded(true)\n onLoad?.(e)\n }\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageError(true)\n onError?.(e)\n }\n\n if (imageError) return null\n\n return (\n <img\n ref={ref}\n className={cn(avatarImageVariants(), className)}\n src={src}\n alt={alt}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n )\n },\n)\n\n/* ─── AvatarFallback ───────────────────────────────────────────── */\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nexport const AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n function AvatarFallback({ className, children, ...props }, ref) {\n const { size, imageLoaded, imageError } = React.useContext(AvatarContext)\n\n if (imageLoaded && !imageError) return null\n\n return (\n <span\n ref={ref}\n className={cn(avatarFallbackVariants({ size }), className)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** Outline of the avatar. */\nexport type AvatarShape = 'circle' | 'square'\n\nexport type AvatarLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n fallback?: string\n size?: AvatarSize\n}\n\nexport interface AvatarAPI {\n /** ARIA attributes to spread on the root element */\n ariaProps: Partial<AccessibilityProps>\n /** Data attributes for CSS styling hooks */\n dataAttributes: Record<string, string>\n /** Image ARIA props */\n imageProps: {\n alt: string\n role: string\n }\n /** Fallback text (initials) */\n fallbackText: string\n /** Current state */\n state: {\n size: AvatarSize\n hasSrc: boolean\n }\n}\n\n/**\n * Extract initials from a name or fallback string.\n * Takes first letter of first two words, uppercased.\n */\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 0 || parts[0] === '') return ''\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n}\n\nexport function createAvatar(props: AvatarProps = {}): AvatarAPI {\n const { src, alt = '', fallback = '', size = 'md' } = props\n\n // role=\"img\" makes its children presentational, so it is only applied when\n // the avatar itself has a name; otherwise the inner <img alt> / fallback\n // text stays exposed.\n const ariaProps: Partial<AccessibilityProps> = {}\n if (alt) {\n ariaProps.role = 'img'\n ariaProps['aria-label'] = alt\n }\n\n const fallbackText = fallback ? getInitials(fallback) : (alt ? getInitials(alt) : '')\n\n const dataAttributes: Record<string, string> = {\n 'data-slot': 'avatar',\n }\n\n return {\n ariaProps,\n dataAttributes,\n imageProps: {\n alt,\n role: 'img',\n },\n fallbackText,\n state: {\n size,\n hasSrc: !!src,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\nimport type { TokenContract } from '@refraction-ui/shared'\n\nexport const avatarTokens: TokenContract = {\n name: 'avatar',\n tokens: {\n bg: { variable: '--rfr-avatar-bg', fallback: 'hsl(var(--muted))' },\n fg: { variable: '--rfr-avatar-fg', fallback: 'hsl(var(--muted-foreground))' },\n border: { variable: '--rfr-avatar-border', fallback: 'hsl(var(--border))' },\n },\n}\n\nexport const avatarVariants = cva({\n base: 'relative flex shrink-0 overflow-hidden',\n variants: {\n shape: {\n circle: 'rounded-full',\n square: 'rounded-md',\n },\n size: {\n xs: 'h-6 w-6',\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n xl: 'h-16 w-16',\n },\n },\n defaultVariants: {\n shape: 'circle',\n size: 'md',\n },\n})\n\nexport const avatarImageVariants = cva({\n base: 'aspect-square h-full w-full object-cover',\n})\n\nexport const avatarFallbackVariants = cva({\n base: 'flex h-full w-full items-center justify-center rounded-[inherit] bg-muted text-muted-foreground',\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n", "import * as React from 'react'\nimport {\n createAvatar,\n avatarVariants,\n avatarImageVariants,\n avatarFallbackVariants,\n type AvatarSize,\n type AvatarShape,\n} from '@refraction-ui/avatar'\nimport { cn } from '@refraction-ui/shared'\n\n/* ─── Context ──────────────────────────────────────────────────── */\ninterface AvatarContextValue {\n size: AvatarSize\n imageLoaded: boolean\n imageError: boolean\n setImageLoaded: (loaded: boolean) => void\n setImageError: (error: boolean) => void\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue>({\n size: 'md',\n imageLoaded: false,\n imageError: false,\n setImageLoaded: () => {},\n setImageError: () => {},\n})\n\n/* ─── Avatar (root) ────────────────────────────────────────────── */\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: AvatarSize\n /** `circle` (default) or `square` (rounded corners) — e.g. for teams and organisations. */\n shape?: AvatarShape\n}\n\n/**\n * Avatar -- circular image with fallback support.\n * Compound component: use Avatar > AvatarImage + AvatarFallback.\n */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar({ size = 'md', shape = 'circle', className, children, ...props }, ref) {\n const [imageLoaded, setImageLoaded] = React.useState(false)\n const [imageError, setImageError] = React.useState(false)\n\n const api = createAvatar({ size, alt: props['aria-label'] })\n\n return (\n <AvatarContext.Provider value={{ size, imageLoaded, imageError, setImageLoaded, setImageError }}>\n <span\n ref={ref}\n className={cn(avatarVariants({ size, shape }), className)}\n {...api.ariaProps}\n {...api.dataAttributes}\n {...props}\n >\n {children}\n </span>\n </AvatarContext.Provider>\n )\n },\n)\n\n/* ─── AvatarImage ──────────────────────────────────────────────── */\nexport interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {}\n\nexport const AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n function AvatarImage({ className, src, alt = '', onLoad, onError, ...props }, ref) {\n const { imageError, setImageLoaded, setImageError } = React.useContext(AvatarContext)\n\n React.useEffect(() => {\n setImageLoaded(false)\n setImageError(false)\n }, [src, setImageLoaded, setImageError])\n\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageLoaded(true)\n onLoad?.(e)\n }\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageError(true)\n onError?.(e)\n }\n\n if (imageError) return null\n\n return (\n <img\n ref={ref}\n className={cn(avatarImageVariants(), className)}\n src={src}\n alt={alt}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n )\n },\n)\n\n/* ─── AvatarFallback ───────────────────────────────────────────── */\nexport interface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {}\n\nexport const AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n function AvatarFallback({ className, children, ...props }, ref) {\n const { size, imageLoaded, imageError } = React.useContext(AvatarContext)\n\n if (imageLoaded && !imageError) return null\n\n return (\n <span\n ref={ref}\n className={cn(avatarFallbackVariants({ size }), className)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n"],
5
+ "mappings": "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",
6
6
  "names": ["Avatar", "AvatarImage", "AvatarFallback"]
7
7
  }
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  cn,
6
6
  cva
7
- } from "./chunk-2Q6HHFAN.js";
7
+ } from "./chunk-75BKRTPO.js";
8
8
 
9
9
  // ../react-badge/dist/index.js
10
10
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-bottom-nav/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-brand-network-cell/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-breadcrumbs/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-browser-chrome-mock/dist/index.js
7
7
  import * as React from "react";
@@ -2,9 +2,9 @@ import {
2
2
  Button,
3
3
  buttonTokens,
4
4
  buttonVariants
5
- } from "./chunk-3Y2T26QD.js";
6
- import "./chunk-QDMLIDYN.js";
7
- import "./chunk-2Q6HHFAN.js";
5
+ } from "./chunk-JZQ5ZL46.js";
6
+ import "./chunk-GU5MI7FX.js";
7
+ import "./chunk-75BKRTPO.js";
8
8
  export {
9
9
  Button,
10
10
  buttonTokens,
@@ -2,7 +2,7 @@ import {
2
2
  cn,
3
3
  cva,
4
4
  generateId
5
- } from "./chunk-2Q6HHFAN.js";
5
+ } from "./chunk-75BKRTPO.js";
6
6
 
7
7
  // ../react-calendar/dist/index.js
8
8
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-call-controls/dist/index.js
7
7
  import * as React from "react";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  cn,
6
6
  cva
7
- } from "./chunk-2Q6HHFAN.js";
7
+ } from "./chunk-75BKRTPO.js";
8
8
 
9
9
  // ../react-callout/dist/index.js
10
10
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-2Q6HHFAN.js";
3
+ } from "./chunk-75BKRTPO.js";
4
4
 
5
5
  // ../react-card-grid/dist/index.js
6
6
  import * as React from "react";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  cn,
6
6
  cva
7
- } from "./chunk-2Q6HHFAN.js";
7
+ } from "./chunk-75BKRTPO.js";
8
8
 
9
9
  // ../react-card/dist/index.js
10
10
  import * as React from "react";
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  cn,
7
7
  devWarn
8
- } from "./chunk-2Q6HHFAN.js";
8
+ } from "./chunk-75BKRTPO.js";
9
9
 
10
10
  // ../react-carousel/dist/index.js
11
11
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  devWarn
3
- } from "./chunk-2Q6HHFAN.js";
3
+ } from "./chunk-75BKRTPO.js";
4
4
 
5
5
  // ../charts/dist/index.js
6
6
  function createLinearScale(domain, range) {
@@ -2,7 +2,7 @@ import {
2
2
  Keys,
3
3
  cn,
4
4
  cva
5
- } from "./chunk-2Q6HHFAN.js";
5
+ } from "./chunk-75BKRTPO.js";
6
6
 
7
7
  // ../react-checkbox/dist/index.js
8
8
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-checklist/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-code-block/dist/index.js
7
7
  import * as React from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-2Q6HHFAN.js";
4
+ } from "./chunk-75BKRTPO.js";
5
5
 
6
6
  // ../react-code-editor/dist/index.js
7
7
  import * as React from "react";
@@ -5,7 +5,7 @@ import {
5
5
  cva,
6
6
  devWarn,
7
7
  generateId
8
- } from "./chunk-2Q6HHFAN.js";
8
+ } from "./chunk-75BKRTPO.js";
9
9
 
10
10
  // ../react-collapsible/dist/index.js
11
11
  import * as React from "react";
@@ -3,7 +3,7 @@ import {
3
3
  cva,
4
4
  devWarn,
5
5
  generateId
6
- } from "./chunk-2Q6HHFAN.js";
6
+ } from "./chunk-75BKRTPO.js";
7
7
 
8
8
  // ../react-combobox/dist/index.js
9
9
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-2Q6HHFAN.js";
3
+ } from "./chunk-75BKRTPO.js";
4
4
 
5
5
  // ../react-command-input/dist/index.js
6
6
  import { useRef, useEffect, useState, forwardRef } from "react";
@@ -5,7 +5,7 @@ import {
5
5
  cva,
6
6
  devWarn,
7
7
  generateId
8
- } from "./chunk-2Q6HHFAN.js";
8
+ } from "./chunk-75BKRTPO.js";
9
9
 
10
10
  // ../react-command/dist/index.js
11
11
  import * as React from "react";
@@ -149,26 +149,49 @@ function useCommandContext() {
149
149
  }
150
150
  return ctx;
151
151
  }
152
+ function itemValueOf(value, children) {
153
+ if (value !== void 0) return value;
154
+ if (typeof children === "string" || typeof children === "number") return String(children);
155
+ return "";
156
+ }
157
+ function collectItems(node, into) {
158
+ React.Children.forEach(node, (child) => {
159
+ if (!React.isValidElement(child)) return;
160
+ if (child.type === CommandItem) {
161
+ const value = itemValueOf(child.props.value, child.props.children);
162
+ into.push({ id: value, value, label: value, disabled: child.props.disabled });
163
+ return;
164
+ }
165
+ collectItems(child.props.children, into);
166
+ });
167
+ return into;
168
+ }
169
+ var defaultFilter2 = (value, search) => value.toLowerCase().includes(search.toLowerCase());
152
170
  function Command({
153
171
  open,
154
172
  onOpenChange,
155
- filter,
173
+ filter = defaultFilter2,
156
174
  className,
157
175
  children
158
176
  }) {
159
- const [items, setItems] = React.useState([]);
177
+ const [registered, setRegistered] = React.useState(() => /* @__PURE__ */ new Map());
160
178
  const [search, setSearch] = React.useState("");
161
179
  const [selectedIndex, setSelectedIndex] = React.useState(0);
162
- const apiRef = React.useRef(null);
163
- const api = React.useMemo(() => {
164
- const instance = createCommand({ open, onOpenChange, filter }, items);
165
- if (search) {
166
- instance.search(search);
180
+ const uid = React.useId().replace(/:/g, "");
181
+ const listId = `rfr-cmd-list-${uid}`;
182
+ const inputId = `rfr-cmd-input-${uid}`;
183
+ const api = React.useMemo(() => createCommand({ open, onOpenChange, filter }), [open, onOpenChange, filter]);
184
+ const items = React.useMemo(() => {
185
+ const all = collectItems(children, []);
186
+ const known = new Set(all.map((i) => i.value));
187
+ for (const [value, item] of registered) {
188
+ if (!known.has(value)) all.push({ id: value, value, label: value, disabled: item.disabled });
167
189
  }
168
- apiRef.current = instance;
169
- return instance;
170
- }, [open, onOpenChange, filter, items, search]);
171
- const filteredItems = api.state.filteredItems;
190
+ return all;
191
+ }, [children, registered]);
192
+ const matches = React.useCallback((value) => !search || filter(value, search), [filter, search]);
193
+ const filteredItems = React.useMemo(() => items.filter((i) => matches(i.value)), [items, matches]);
194
+ const highlighted = filteredItems[selectedIndex];
172
195
  const handleSearch = React.useCallback((query) => {
173
196
  setSearch(query);
174
197
  setSelectedIndex(0);
@@ -176,57 +199,59 @@ function Command({
176
199
  const handleSelect = React.useCallback((index) => {
177
200
  setSelectedIndex(index);
178
201
  }, []);
179
- const registerItem = React.useCallback((item) => {
180
- setItems((prev) => {
181
- if (prev.some((i) => i.id === item.id)) return prev;
182
- return [...prev, item];
202
+ const registerItem = React.useCallback((value, item) => {
203
+ setRegistered((prev) => {
204
+ const current = prev.get(value);
205
+ if (current && current.domId === item.domId && current.disabled === item.disabled) return prev;
206
+ const next = new Map(prev);
207
+ next.set(value, item);
208
+ return next;
183
209
  });
184
210
  }, []);
185
- const unregisterItem = React.useCallback((id) => {
186
- setItems((prev) => prev.filter((i) => i.id !== id));
211
+ const unregisterItem = React.useCallback((value) => {
212
+ setRegistered((prev) => {
213
+ if (!prev.has(value)) return prev;
214
+ const next = new Map(prev);
215
+ next.delete(value);
216
+ return next;
217
+ });
187
218
  }, []);
188
- const handleKeyDown = React.useCallback(
189
- (e) => {
190
- const handler = createKeyboardHandler({
191
- [Keys.ArrowDown]: (ev) => {
192
- ev.preventDefault();
193
- if (filteredItems.length > 0) {
194
- setSelectedIndex((prev) => (prev + 1) % filteredItems.length);
195
- }
196
- },
197
- [Keys.ArrowUp]: (ev) => {
198
- ev.preventDefault();
199
- if (filteredItems.length > 0) {
200
- setSelectedIndex((prev) => (prev - 1 + filteredItems.length) % filteredItems.length);
201
- }
202
- },
203
- [Keys.Enter]: (ev) => {
204
- ev.preventDefault();
205
- },
206
- [Keys.Escape]: (ev) => {
207
- ev.preventDefault();
208
- onOpenChange?.(false);
209
- }
210
- });
211
- handler(e.nativeEvent);
212
- },
213
- [filteredItems.length, onOpenChange]
214
- );
215
- const ctx = React.useMemo(
216
- () => ({
217
- search,
218
- onSearch: handleSearch,
219
- selectedIndex,
220
- onSelect: handleSelect,
221
- items,
222
- filteredItems,
223
- registerItem,
224
- unregisterItem,
225
- listId: api.ids.list,
226
- inputId: api.ids.input
227
- }),
228
- [search, handleSearch, selectedIndex, handleSelect, items, filteredItems, registerItem, unregisterItem, api.ids.list, api.ids.input]
229
- );
219
+ const handleKeyDown = (e) => {
220
+ const count = filteredItems.length;
221
+ const handler = createKeyboardHandler({
222
+ [Keys.ArrowDown]: (ev) => {
223
+ ev.preventDefault();
224
+ if (count > 0) setSelectedIndex((prev) => (prev + 1) % count);
225
+ },
226
+ [Keys.ArrowUp]: (ev) => {
227
+ ev.preventDefault();
228
+ if (count > 0) setSelectedIndex((prev) => (prev - 1 + count) % count);
229
+ },
230
+ [Keys.Enter]: (ev) => {
231
+ ev.preventDefault();
232
+ if (highlighted && !highlighted.disabled) registered.get(highlighted.value)?.select();
233
+ },
234
+ [Keys.Escape]: (ev) => {
235
+ ev.preventDefault();
236
+ onOpenChange?.(false);
237
+ }
238
+ });
239
+ handler(e.nativeEvent);
240
+ };
241
+ const ctx = {
242
+ search,
243
+ onSearch: handleSearch,
244
+ selectedIndex,
245
+ onSelect: handleSelect,
246
+ items,
247
+ filteredItems,
248
+ matches,
249
+ registerItem,
250
+ unregisterItem,
251
+ activeDescendant: highlighted ? registered.get(highlighted.value)?.domId : void 0,
252
+ listId,
253
+ inputId
254
+ };
230
255
  return React.createElement(
231
256
  CommandContext.Provider,
232
257
  { value: ctx },
@@ -235,6 +260,8 @@ function Command({
235
260
  {
236
261
  className: cn(commandVariants(), className),
237
262
  ...api.ariaProps,
263
+ "aria-owns": listId,
264
+ id: `rfr-cmd-${uid}`,
238
265
  onKeyDown: handleKeyDown
239
266
  },
240
267
  children
@@ -243,7 +270,7 @@ function Command({
243
270
  }
244
271
  var CommandInput = React.forwardRef(
245
272
  function CommandInput2({ className, onChange, ...props }, ref) {
246
- const { search, onSearch, inputId, listId } = useCommandContext();
273
+ const { search, onSearch, inputId, listId, activeDescendant } = useCommandContext();
247
274
  const handleChange = (e) => {
248
275
  onSearch(e.target.value);
249
276
  onChange?.(e);
@@ -255,6 +282,7 @@ var CommandInput = React.forwardRef(
255
282
  role: "searchbox",
256
283
  "aria-autocomplete": "list",
257
284
  "aria-controls": listId,
285
+ "aria-activedescendant": activeDescendant,
258
286
  value: search,
259
287
  onChange: handleChange,
260
288
  className: cn(commandInputVariants(), className),
@@ -316,21 +344,38 @@ var CommandGroup = React.forwardRef(
316
344
  }
317
345
  );
318
346
  var CommandItem = React.forwardRef(
319
- function CommandItem2({ className, value, disabled, onSelect: onItemSelect, children, ...props }, ref) {
320
- const state = disabled ? "disabled" : "default";
347
+ function CommandItem2({ className, value, disabled = false, onSelect: onItemSelect, onClick, onMouseMove, children, ...props }, ref) {
348
+ const { matches, filteredItems, selectedIndex, onSelect, registerItem, unregisterItem } = useCommandContext();
349
+ const itemValue = itemValueOf(value, children);
350
+ const domId = `rfr-cmd-item-${React.useId().replace(/:/g, "")}`;
351
+ const onSelectRef = React.useRef(onItemSelect);
352
+ onSelectRef.current = onItemSelect;
353
+ React.useEffect(() => {
354
+ registerItem(itemValue, { domId, disabled, select: () => onSelectRef.current?.() });
355
+ }, [registerItem, itemValue, domId, disabled]);
356
+ React.useEffect(() => () => unregisterItem(itemValue), [unregisterItem, itemValue]);
357
+ if (!matches(itemValue)) return null;
358
+ const index = filteredItems.findIndex((i) => i.value === itemValue);
359
+ const isSelected = index !== -1 && index === selectedIndex;
360
+ const state = disabled ? "disabled" : isSelected ? "selected" : "default";
321
361
  return React.createElement(
322
362
  "div",
323
363
  {
324
364
  ref,
365
+ id: domId,
325
366
  role: "option",
326
- "aria-selected": false,
327
- "aria-disabled": disabled ?? false,
328
- "data-value": value,
367
+ "aria-selected": isSelected,
368
+ "aria-disabled": disabled,
369
+ "data-value": itemValue,
370
+ "data-selected": isSelected ? "" : void 0,
329
371
  className: cn(commandItemVariants({ state }), className),
330
- onClick: () => {
331
- if (!disabled) {
332
- onItemSelect?.();
333
- }
372
+ onClick: (e) => {
373
+ onClick?.(e);
374
+ if (!disabled && !e.defaultPrevented) onItemSelect?.();
375
+ },
376
+ onMouseMove: (e) => {
377
+ onMouseMove?.(e);
378
+ if (index !== -1 && index !== selectedIndex) onSelect(index);
334
379
  },
335
380
  ...props
336
381
  },