@refraction-ui/react 0.21.0 → 0.23.0

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 (235) hide show
  1. package/dist/{chunk-ZF3OHCGV.js → chunk-2Q6HHFAN.js} +1 -1
  2. package/dist/chunk-2Q6HHFAN.js.map +7 -0
  3. package/dist/{chunk-533MCMSU.js → chunk-3I3DYDHR.js} +2 -2
  4. package/dist/{chunk-H54FLNAF.js → chunk-63N4PZUJ.js} +2 -2
  5. package/dist/chunk-7P7EJ56S.js +7 -0
  6. package/dist/{chunk-Y2FNNAIL.js → chunk-EGVPAMQU.js} +2 -2
  7. package/dist/chunk-EGVPAMQU.js.map +1 -0
  8. package/dist/{chunk-WK2IIUFO.js → chunk-QDMLIDYN.js} +2 -2
  9. package/dist/{chunk-BOLFYVI6.js → chunk-QPCKJ2YR.js} +2 -2
  10. package/dist/{chunk-TOZBR4GL.js → chunk-RSWOLRIC.js} +4 -4
  11. package/dist/{chunk-TOZBR4GL.js.map → chunk-RSWOLRIC.js.map} +1 -1
  12. package/dist/{chunk-UNEM2TRI.js → chunk-SDAJVXD4.js} +2 -2
  13. package/dist/{chunk-VK3EQ34F.js → chunk-V24GDHUX.js} +2 -2
  14. package/dist/{chunk-XWP763SH.js → chunk-V727VZOE.js} +4 -2
  15. package/dist/{chunk-XWP763SH.js.map → chunk-V727VZOE.js.map} +2 -2
  16. package/dist/{chunk-AMK4VCBG.js → chunk-WYKPPK3W.js} +2 -2
  17. package/dist/{chunk-ONACRMG4.js → chunk-XMFNBOPO.js} +2 -2
  18. package/dist/{chunk-NKCWOPNX.js → chunk-Z5IHYNQD.js} +12 -8
  19. package/dist/chunk-Z5IHYNQD.js.map +7 -0
  20. package/dist/faro-engine-VIUXJAPH-FSARIABU.js +3 -0
  21. package/dist/{faro-engine-47HGRAQH-JKINJPMH.js.map → faro-engine-VIUXJAPH-FSARIABU.js.map} +1 -1
  22. package/dist/form.cjs.map +1 -1
  23. package/dist/form.js +1 -1
  24. package/dist/index.cjs +1305 -302
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +7 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.js +7 -0
  29. package/dist/internal/action-list/index.d.ts +39 -0
  30. package/dist/internal/avatar/index.d.cts +4 -1
  31. package/dist/internal/avatar/index.d.ts +4 -1
  32. package/dist/internal/button/index.d.cts +2 -2
  33. package/dist/internal/button/index.d.ts +2 -2
  34. package/dist/internal/card/index.d.cts +5 -1
  35. package/dist/internal/card/index.d.ts +5 -1
  36. package/dist/internal/data-table/index.d.cts +48 -3
  37. package/dist/internal/data-table/index.d.ts +48 -3
  38. package/dist/internal/funnel-chart/index.d.ts +60 -0
  39. package/dist/internal/line-chart/index.d.ts +124 -0
  40. package/dist/internal/native-select/index.d.ts +21 -0
  41. package/dist/internal/page-header/index.d.ts +35 -0
  42. package/dist/internal/react-action-list/index.d.ts +28 -0
  43. package/dist/internal/react-avatar/index.d.cts +4 -2
  44. package/dist/internal/react-avatar/index.d.ts +4 -2
  45. package/dist/internal/react-card/index.d.cts +10 -4
  46. package/dist/internal/react-card/index.d.ts +10 -4
  47. package/dist/internal/react-command/index.d.cts +13 -2
  48. package/dist/internal/react-command/index.d.ts +13 -2
  49. package/dist/internal/react-data-table/index.d.cts +27 -9
  50. package/dist/internal/react-data-table/index.d.ts +27 -9
  51. package/dist/internal/react-dialog/index.d.cts +5 -0
  52. package/dist/internal/react-dialog/index.d.ts +5 -0
  53. package/dist/internal/react-dropdown-menu/index.d.cts +19 -1
  54. package/dist/internal/react-dropdown-menu/index.d.ts +19 -1
  55. package/dist/internal/react-funnel-chart/index.d.ts +28 -0
  56. package/dist/internal/react-line-chart/index.d.ts +38 -0
  57. package/dist/internal/react-native-select/index.d.ts +19 -0
  58. package/dist/internal/react-page-header/index.d.ts +23 -0
  59. package/dist/internal/react-select/index.d.cts +21 -3
  60. package/dist/internal/react-select/index.d.ts +21 -3
  61. package/dist/internal/react-stat-grid/index.d.ts +22 -11
  62. package/dist/internal/react-table/index.d.ts +39 -0
  63. package/dist/internal/select/index.d.cts +14 -1
  64. package/dist/internal/select/index.d.ts +14 -1
  65. package/dist/internal/shared/index.d.cts +6 -3
  66. package/dist/internal/shared/index.d.ts +6 -3
  67. package/dist/internal/stat-grid/index.d.ts +49 -7
  68. package/dist/internal/table/index.d.ts +46 -0
  69. package/dist/internal/tabs/index.d.cts +8 -1
  70. package/dist/internal/tabs/index.d.ts +8 -1
  71. package/dist/react-accordion.js +1 -1
  72. package/dist/react-action-list.js +74 -0
  73. package/dist/react-action-list.js.map +7 -0
  74. package/dist/react-ai.js +1 -1
  75. package/dist/react-analytics.js +16 -4
  76. package/dist/react-analytics.js.map +2 -2
  77. package/dist/react-animated-text.js +1 -1
  78. package/dist/react-app-shell.js +1 -1
  79. package/dist/react-audience-feature-card.js +1 -1
  80. package/dist/react-audio-room.js +1 -1
  81. package/dist/react-auth.js +1 -1
  82. package/dist/react-avatar-group.js +1 -1
  83. package/dist/react-avatar.js +13 -9
  84. package/dist/react-avatar.js.map +2 -2
  85. package/dist/react-badge.js +2 -2
  86. package/dist/react-badge.js.map +1 -1
  87. package/dist/react-bottom-nav.js +1 -1
  88. package/dist/react-brand-network-cell.js +1 -1
  89. package/dist/react-breadcrumbs.js +1 -1
  90. package/dist/react-browser-chrome-mock.js +1 -1
  91. package/dist/react-button.js +3 -3
  92. package/dist/react-calendar.js +1 -1
  93. package/dist/react-call-controls.js +1 -1
  94. package/dist/react-callout.js +8 -3
  95. package/dist/react-callout.js.map +2 -2
  96. package/dist/react-card-grid.js +1 -1
  97. package/dist/react-card.js +5 -5
  98. package/dist/react-card.js.map +2 -2
  99. package/dist/react-carousel.js +1 -1
  100. package/dist/react-charts.js +1 -1
  101. package/dist/react-checkbox.js +1 -1
  102. package/dist/react-checklist.js +1 -1
  103. package/dist/react-code-block.js +1 -1
  104. package/dist/react-code-editor.js +1 -1
  105. package/dist/react-collapsible.js +1 -1
  106. package/dist/react-combobox.js +1 -1
  107. package/dist/react-command-input.js +1 -1
  108. package/dist/react-command.js +115 -70
  109. package/dist/react-command.js.map +3 -3
  110. package/dist/react-composer.js +3 -3
  111. package/dist/react-content-protection.js +1 -1
  112. package/dist/react-conversation.js +5 -5
  113. package/dist/react-cookie-consent.js +1 -1
  114. package/dist/react-data-table.js +125 -114
  115. package/dist/react-data-table.js.map +2 -2
  116. package/dist/react-date-picker.js +1 -1
  117. package/dist/react-device-frame.js +1 -1
  118. package/dist/react-dialog.js +33 -9
  119. package/dist/react-dialog.js.map +2 -2
  120. package/dist/react-diff-viewer.js +1 -1
  121. package/dist/react-dropdown-menu.js +61 -8
  122. package/dist/react-dropdown-menu.js.map +3 -3
  123. package/dist/react-editor-status-bar.js +1 -1
  124. package/dist/react-editor-tabs.js +1 -1
  125. package/dist/react-emoji-picker.js +2 -2
  126. package/dist/react-empty-state.js +1 -1
  127. package/dist/react-feedback-dialog.js +2 -2
  128. package/dist/react-file-tree.js +1 -1
  129. package/dist/react-file-upload.js +1 -1
  130. package/dist/react-floating-reactions.js +1 -1
  131. package/dist/react-flow-editor.js +2 -2
  132. package/dist/react-footer.js +1 -1
  133. package/dist/react-funnel-chart.js +105 -0
  134. package/dist/react-funnel-chart.js.map +7 -0
  135. package/dist/react-graph-view.js +2 -2
  136. package/dist/react-infinite-canvas.js +2 -2
  137. package/dist/react-inline-editor.js +1 -1
  138. package/dist/react-input-group.js +1 -1
  139. package/dist/react-input.js +2 -2
  140. package/dist/react-install-prompt.js +1 -1
  141. package/dist/react-kanban-board.js +1 -1
  142. package/dist/react-keyboard-shortcut.js +2 -2
  143. package/dist/react-language-selector.js +1 -1
  144. package/dist/react-line-chart.js +280 -0
  145. package/dist/react-line-chart.js.map +7 -0
  146. package/dist/react-link-card.js +1 -1
  147. package/dist/react-live-captions.js +1 -1
  148. package/dist/react-live-cursors.js +1 -1
  149. package/dist/react-live-transcript.js +1 -1
  150. package/dist/react-location-selector.js +1 -1
  151. package/dist/react-logger.js +3 -3
  152. package/dist/react-markdown-renderer.js +2 -2
  153. package/dist/react-marquee-strip.js +1 -1
  154. package/dist/react-mascot.js +1 -1
  155. package/dist/react-mastery-bar.js +1 -1
  156. package/dist/react-mini-map.js +1 -1
  157. package/dist/react-mobile-nav.js +1 -1
  158. package/dist/react-native-select.js +52 -0
  159. package/dist/react-native-select.js.map +7 -0
  160. package/dist/react-navbar.js +1 -1
  161. package/dist/react-numbered-steps.js +1 -1
  162. package/dist/react-otp-input.js +1 -1
  163. package/dist/react-page-header.js +40 -0
  164. package/dist/react-page-header.js.map +7 -0
  165. package/dist/react-pagination.js +1 -1
  166. package/dist/react-password-input.js +2 -2
  167. package/dist/react-payment.js +1 -1
  168. package/dist/react-popover.js +1 -1
  169. package/dist/react-pre-call-lobby.js +1 -1
  170. package/dist/react-presence-indicator.js +1 -1
  171. package/dist/react-pricing-card.js +1 -1
  172. package/dist/react-progress-display.js +2 -2
  173. package/dist/react-progress-display.js.map +1 -1
  174. package/dist/react-radial-gauge.js +1 -1
  175. package/dist/react-radio.js +1 -1
  176. package/dist/react-rating-scale.js +1 -1
  177. package/dist/react-reaction-bar.js +1 -1
  178. package/dist/react-resizable-layout.js +1 -1
  179. package/dist/react-search-bar.js +1 -1
  180. package/dist/react-section-head.js +1 -1
  181. package/dist/react-segmented-control.js +1 -1
  182. package/dist/react-select.js +94 -20
  183. package/dist/react-select.js.map +3 -3
  184. package/dist/react-separator.js +1 -1
  185. package/dist/react-sheet.js +1 -1
  186. package/dist/react-sidebar.js +1 -1
  187. package/dist/react-skeleton.js +1 -1
  188. package/dist/react-skip-to-content.js +1 -1
  189. package/dist/react-slide-viewer.js +1 -1
  190. package/dist/react-slider.js +1 -1
  191. package/dist/react-slot-picker.js +1 -1
  192. package/dist/react-social-auth-button.js +3 -3
  193. package/dist/react-sortable-list.js +1 -1
  194. package/dist/react-stat-grid.js +91 -22
  195. package/dist/react-stat-grid.js.map +2 -2
  196. package/dist/react-status-indicator.js +1 -1
  197. package/dist/react-steps.js +1 -1
  198. package/dist/react-sticky-note.js +1 -1
  199. package/dist/react-switch.js +1 -1
  200. package/dist/react-table-of-contents.js +1 -1
  201. package/dist/react-table.js +148 -0
  202. package/dist/react-table.js.map +7 -0
  203. package/dist/react-tabs.js +84 -7
  204. package/dist/react-tabs.js.map +2 -2
  205. package/dist/react-terminal.js +1 -1
  206. package/dist/react-test-results.js +1 -1
  207. package/dist/react-textarea.js +3 -3
  208. package/dist/react-textarea.js.map +1 -1
  209. package/dist/react-thread-view.js +2 -2
  210. package/dist/react-timeline.js +1 -1
  211. package/dist/react-toast.js +1 -1
  212. package/dist/react-tooltip.js +1 -1
  213. package/dist/react-version-selector.js +1 -1
  214. package/dist/react-video-grid.js +2 -2
  215. package/dist/react-video-player.js +1 -1
  216. package/dist/react-video-tile.js +2 -2
  217. package/dist/react-voice-pill.js +1 -1
  218. package/dist/react-waveform.js +1 -1
  219. package/dist/react-wizard.js +1 -1
  220. package/dist/theme.js +1 -1
  221. package/package.json +7 -1
  222. package/dist/chunk-NKCWOPNX.js.map +0 -7
  223. package/dist/chunk-SDZ3LROZ.js +0 -7
  224. package/dist/chunk-Y2FNNAIL.js.map +0 -1
  225. package/dist/chunk-ZF3OHCGV.js.map +0 -7
  226. package/dist/faro-engine-47HGRAQH-JKINJPMH.js +0 -3
  227. /package/dist/{chunk-533MCMSU.js.map → chunk-3I3DYDHR.js.map} +0 -0
  228. /package/dist/{chunk-H54FLNAF.js.map → chunk-63N4PZUJ.js.map} +0 -0
  229. /package/dist/{chunk-SDZ3LROZ.js.map → chunk-7P7EJ56S.js.map} +0 -0
  230. /package/dist/{chunk-WK2IIUFO.js.map → chunk-QDMLIDYN.js.map} +0 -0
  231. /package/dist/{chunk-BOLFYVI6.js.map → chunk-QPCKJ2YR.js.map} +0 -0
  232. /package/dist/{chunk-UNEM2TRI.js.map → chunk-SDAJVXD4.js.map} +0 -0
  233. /package/dist/{chunk-VK3EQ34F.js.map → chunk-V24GDHUX.js.map} +0 -0
  234. /package/dist/{chunk-AMK4VCBG.js.map → chunk-WYKPPK3W.js.map} +0 -0
  235. /package/dist/{chunk-ONACRMG4.js.map → chunk-XMFNBOPO.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  cva,
6
6
  devWarn,
7
7
  generateId
8
- } from "./chunk-ZF3OHCGV.js";
8
+ } from "./chunk-2Q6HHFAN.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
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../command/src/command.ts", "../../command/src/command.styles.ts", "../../react-command/src/command.tsx"],
4
- "sourcesContent": ["import type { KeyboardHandlerMap } from '@refraction-ui/shared'\nimport { Keys, generateId } from '@refraction-ui/shared'\n\nexport interface CommandProps {\n /** Whether the command palette is open (controlled) */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Custom filter function — receives item value and search query, returns true to include */\n filter?: (value: string, search: string) => boolean\n}\n\nexport interface CommandItemData {\n /** Unique identifier for the item */\n id: string\n /** Display label */\n label: string\n /** Searchable value */\n value: string\n /** Whether the item is disabled */\n disabled?: boolean\n /** Optional group the item belongs to */\n group?: string\n}\n\nexport interface CommandState {\n /** Current search query */\n search: string\n /** Items after filtering */\n filteredItems: CommandItemData[]\n /** Index of the currently highlighted item in filteredItems */\n selectedIndex: number\n /** Whether the palette is open */\n open: boolean\n}\n\nexport interface CommandAPI {\n /** Current command state */\n state: CommandState\n /** Update the search query and re-filter items */\n search(query: string): void\n /** Select the item at the given index (or the currently highlighted item) */\n select(index?: number): CommandItemData | undefined\n /** Keyboard handlers for the command palette */\n keyboardHandlers: KeyboardHandlerMap\n /** ARIA attributes for the command root */\n ariaProps: Record<string, unknown>\n /** ARIA attributes for the input */\n inputAriaProps: Record<string, unknown>\n /** ARIA attributes for the list */\n listAriaProps: Record<string, unknown>\n /** Get ARIA attributes for a specific item */\n getItemAriaProps(item: CommandItemData, index: number): Record<string, unknown>\n /** Generated IDs */\n ids: {\n root: string\n input: string\n list: string\n }\n}\n\n/** Default filter: case-insensitive includes */\nfunction defaultFilter(value: string, search: string): boolean {\n return value.toLowerCase().includes(search.toLowerCase())\n}\n\nexport function createCommand(\n props: CommandProps = {},\n items: CommandItemData[] = [],\n): CommandAPI {\n const {\n open: controlledOpen,\n onOpenChange,\n filter = defaultFilter,\n } = props\n\n const rootId = generateId('rfr-cmd')\n const inputId = generateId('rfr-cmd-input')\n const listId = generateId('rfr-cmd-list')\n\n let searchQuery = ''\n let selectedIndex = 0\n let filteredItems = [...items]\n const isOpen = controlledOpen ?? true\n\n function applyFilter(query: string): CommandItemData[] {\n if (!query) return [...items]\n return items.filter((item) => filter(item.value, query))\n }\n\n function doSearch(query: string): void {\n searchQuery = query\n filteredItems = applyFilter(query)\n selectedIndex = 0\n }\n\n function doSelect(index?: number): CommandItemData | undefined {\n const idx = index ?? selectedIndex\n const item = filteredItems[idx]\n if (!item || item.disabled) return undefined\n return item\n }\n\n const keyboardHandlers: KeyboardHandlerMap = {\n [Keys.ArrowDown]: (e) => {\n e.preventDefault()\n if (filteredItems.length > 0) {\n selectedIndex = (selectedIndex + 1) % filteredItems.length\n }\n },\n [Keys.ArrowUp]: (e) => {\n e.preventDefault()\n if (filteredItems.length > 0) {\n selectedIndex = (selectedIndex - 1 + filteredItems.length) % filteredItems.length\n }\n },\n [Keys.Enter]: (e) => {\n e.preventDefault()\n doSelect()\n },\n [Keys.Escape]: (e) => {\n e.preventDefault()\n onOpenChange?.(false)\n },\n }\n\n const ariaProps: Record<string, unknown> = {\n role: 'combobox',\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'listbox',\n 'aria-owns': listId,\n id: rootId,\n }\n\n const inputAriaProps: Record<string, unknown> = {\n role: 'searchbox',\n 'aria-autocomplete': 'list',\n 'aria-controls': listId,\n id: inputId,\n }\n\n const listAriaProps: Record<string, unknown> = {\n role: 'listbox',\n id: listId,\n 'aria-label': 'Command suggestions',\n }\n\n function getItemAriaProps(item: CommandItemData, index: number): Record<string, unknown> {\n return {\n role: 'option',\n 'aria-selected': index === selectedIndex,\n 'aria-disabled': item.disabled ?? false,\n id: `${listId}-item-${item.id}`,\n }\n }\n\n return {\n get state(): CommandState {\n return {\n search: searchQuery,\n filteredItems,\n selectedIndex,\n open: isOpen,\n }\n },\n search: doSearch,\n select: doSelect,\n keyboardHandlers,\n ariaProps,\n inputAriaProps,\n listAriaProps,\n getItemAriaProps,\n ids: {\n root: rootId,\n input: inputId,\n list: listId,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const commandVariants = cva({\n base: 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n})\n\nexport const commandInputVariants = cva({\n base: 'flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n})\n\nexport const commandItemVariants = cva({\n base: 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n variants: {\n state: {\n default: '',\n selected: 'bg-accent text-accent-foreground',\n disabled: 'pointer-events-none opacity-50',\n },\n },\n defaultVariants: {\n state: 'default',\n },\n})\n\nexport const commandGroupVariants = cva({\n base: 'overflow-hidden p-1 text-foreground',\n})\n", "import * as React from 'react'\nimport {\n createCommand,\n commandVariants,\n commandInputVariants,\n commandItemVariants,\n commandGroupVariants,\n type CommandProps as CoreCommandProps,\n type CommandItemData,\n} from '@refraction-ui/command'\nimport { cn, createKeyboardHandler, Keys, devWarn } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface CommandContextValue {\n search: string\n onSearch: (query: string) => void\n selectedIndex: number\n onSelect: (index: number) => void\n items: CommandItemData[]\n filteredItems: CommandItemData[]\n registerItem: (item: CommandItemData) => void\n unregisterItem: (id: string) => void\n listId: string\n inputId: string\n}\n\nconst CommandContext = React.createContext<CommandContextValue | null>(null)\n\nfunction useCommandContext(): CommandContextValue {\n const ctx = React.useContext(CommandContext)\n if (!ctx) {\n devWarn(\n 'react-command/context-outside-provider',\n 'Command compound components (CommandInput/CommandList/CommandItem/CommandGroup/etc.) must be rendered inside a <Command>. The missing CommandContext makes this throw.',\n )\n throw new Error('Command compound components must be used within <Command>')\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Command (root provider)\n// ---------------------------------------------------------------------------\n\nexport interface CommandProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n filter?: (value: string, search: string) => boolean\n className?: string\n children?: React.ReactNode\n}\n\nexport function Command({\n open,\n onOpenChange,\n filter,\n className,\n children,\n}: CommandProps) {\n const [items, setItems] = React.useState<CommandItemData[]>([])\n const [search, setSearch] = React.useState('')\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n\n const apiRef = React.useRef<ReturnType<typeof createCommand> | null>(null)\n\n // Recompute the API when items or search change\n const api = React.useMemo(() => {\n const instance = createCommand({ open, onOpenChange, filter }, items)\n if (search) {\n instance.search(search)\n }\n apiRef.current = instance\n return instance\n }, [open, onOpenChange, filter, items, search])\n\n const filteredItems = api.state.filteredItems\n\n const handleSearch = React.useCallback((query: string) => {\n setSearch(query)\n setSelectedIndex(0)\n }, [])\n\n const handleSelect = React.useCallback((index: number) => {\n setSelectedIndex(index)\n }, [])\n\n const registerItem = React.useCallback((item: CommandItemData) => {\n setItems((prev) => {\n if (prev.some((i) => i.id === item.id)) return prev\n return [...prev, item]\n })\n }, [])\n\n const unregisterItem = React.useCallback((id: string) => {\n setItems((prev) => prev.filter((i) => i.id !== id))\n }, [])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n const handler = createKeyboardHandler({\n [Keys.ArrowDown]: (ev) => {\n ev.preventDefault()\n if (filteredItems.length > 0) {\n setSelectedIndex((prev) => (prev + 1) % filteredItems.length)\n }\n },\n [Keys.ArrowUp]: (ev) => {\n ev.preventDefault()\n if (filteredItems.length > 0) {\n setSelectedIndex((prev) => (prev - 1 + filteredItems.length) % filteredItems.length)\n }\n },\n [Keys.Enter]: (ev) => {\n ev.preventDefault()\n },\n [Keys.Escape]: (ev) => {\n ev.preventDefault()\n onOpenChange?.(false)\n },\n })\n handler(e.nativeEvent)\n },\n [filteredItems.length, onOpenChange],\n )\n\n const ctx = React.useMemo<CommandContextValue>(\n () => ({\n search,\n onSearch: handleSearch,\n selectedIndex,\n onSelect: handleSelect,\n items,\n filteredItems,\n registerItem,\n unregisterItem,\n listId: api.ids.list,\n inputId: api.ids.input,\n }),\n [search, handleSearch, selectedIndex, handleSelect, items, filteredItems, registerItem, unregisterItem, api.ids.list, api.ids.input],\n )\n\n return React.createElement(\n CommandContext.Provider,\n { value: ctx },\n React.createElement(\n 'div',\n {\n className: cn(commandVariants(), className),\n ...api.ariaProps,\n onKeyDown: handleKeyDown,\n },\n children,\n ),\n )\n}\n\n// ---------------------------------------------------------------------------\n// CommandInput\n// ---------------------------------------------------------------------------\n\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nexport const CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n function CommandInput({ className, onChange, ...props }, ref) {\n const { search, onSearch, inputId, listId } = useCommandContext()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onSearch(e.target.value)\n onChange?.(e)\n }\n\n return React.createElement('input', {\n ref,\n id: inputId,\n type: 'text',\n role: 'searchbox',\n 'aria-autocomplete': 'list',\n 'aria-controls': listId,\n value: search,\n onChange: handleChange,\n className: cn(commandInputVariants(), className),\n ...props,\n })\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandList\n// ---------------------------------------------------------------------------\n\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n function CommandList({ className, children, ...props }, ref) {\n const { listId } = useCommandContext()\n\n return React.createElement(\n 'div',\n {\n ref,\n id: listId,\n role: 'listbox',\n 'aria-label': 'Command suggestions',\n className: cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className),\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandEmpty\n// ---------------------------------------------------------------------------\n\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n function CommandEmpty({ className, children, ...props }, ref) {\n const { filteredItems } = useCommandContext()\n\n if (filteredItems.length > 0) return null\n\n return React.createElement(\n 'div',\n {\n ref,\n className: cn('py-6 text-center text-sm', className),\n role: 'presentation',\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandGroup\n// ---------------------------------------------------------------------------\n\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: string\n}\n\nexport const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n function CommandGroup({ className, heading, children, ...props }, ref) {\n return React.createElement(\n 'div',\n {\n ref,\n className: cn(commandGroupVariants(), className),\n role: 'group',\n 'aria-label': heading,\n ...props,\n },\n heading\n ? React.createElement(\n 'div',\n { className: 'px-2 py-1.5 text-xs font-medium text-muted-foreground' },\n heading,\n )\n : null,\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandItem\n// ---------------------------------------------------------------------------\n\nexport interface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n value?: string\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n function CommandItem({ className, value, disabled, onSelect: onItemSelect, children, ...props }, ref) {\n const state = disabled ? 'disabled' : 'default'\n\n return React.createElement(\n 'div',\n {\n ref,\n role: 'option',\n 'aria-selected': false,\n 'aria-disabled': disabled ?? false,\n 'data-value': value,\n className: cn(commandItemVariants({ state }), className),\n onClick: () => {\n if (!disabled) {\n onItemSelect?.()\n }\n },\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandSeparator\n// ---------------------------------------------------------------------------\n\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\n function CommandSeparator({ className, ...props }, ref) {\n return React.createElement('div', {\n ref,\n role: 'separator',\n className: cn('-mx-1 h-px bg-border', className),\n ...props,\n })\n },\n)\n"],
5
- "mappings": "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",
6
- "names": ["CommandInput", "CommandList", "CommandEmpty", "CommandGroup", "CommandItem", "CommandSeparator"]
4
+ "sourcesContent": ["import type { KeyboardHandlerMap } from '@refraction-ui/shared'\nimport { Keys, generateId } from '@refraction-ui/shared'\n\nexport interface CommandProps {\n /** Whether the command palette is open (controlled) */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Custom filter function — receives item value and search query, returns true to include */\n filter?: (value: string, search: string) => boolean\n}\n\nexport interface CommandItemData {\n /** Unique identifier for the item */\n id: string\n /** Display label */\n label: string\n /** Searchable value */\n value: string\n /** Whether the item is disabled */\n disabled?: boolean\n /** Optional group the item belongs to */\n group?: string\n}\n\nexport interface CommandState {\n /** Current search query */\n search: string\n /** Items after filtering */\n filteredItems: CommandItemData[]\n /** Index of the currently highlighted item in filteredItems */\n selectedIndex: number\n /** Whether the palette is open */\n open: boolean\n}\n\nexport interface CommandAPI {\n /** Current command state */\n state: CommandState\n /** Update the search query and re-filter items */\n search(query: string): void\n /** Select the item at the given index (or the currently highlighted item) */\n select(index?: number): CommandItemData | undefined\n /** Keyboard handlers for the command palette */\n keyboardHandlers: KeyboardHandlerMap\n /** ARIA attributes for the command root */\n ariaProps: Record<string, unknown>\n /** ARIA attributes for the input */\n inputAriaProps: Record<string, unknown>\n /** ARIA attributes for the list */\n listAriaProps: Record<string, unknown>\n /** Get ARIA attributes for a specific item */\n getItemAriaProps(item: CommandItemData, index: number): Record<string, unknown>\n /** Generated IDs */\n ids: {\n root: string\n input: string\n list: string\n }\n}\n\n/** Default filter: case-insensitive includes */\nfunction defaultFilter(value: string, search: string): boolean {\n return value.toLowerCase().includes(search.toLowerCase())\n}\n\nexport function createCommand(\n props: CommandProps = {},\n items: CommandItemData[] = [],\n): CommandAPI {\n const {\n open: controlledOpen,\n onOpenChange,\n filter = defaultFilter,\n } = props\n\n const rootId = generateId('rfr-cmd')\n const inputId = generateId('rfr-cmd-input')\n const listId = generateId('rfr-cmd-list')\n\n let searchQuery = ''\n let selectedIndex = 0\n let filteredItems = [...items]\n const isOpen = controlledOpen ?? true\n\n function applyFilter(query: string): CommandItemData[] {\n if (!query) return [...items]\n return items.filter((item) => filter(item.value, query))\n }\n\n function doSearch(query: string): void {\n searchQuery = query\n filteredItems = applyFilter(query)\n selectedIndex = 0\n }\n\n function doSelect(index?: number): CommandItemData | undefined {\n const idx = index ?? selectedIndex\n const item = filteredItems[idx]\n if (!item || item.disabled) return undefined\n return item\n }\n\n const keyboardHandlers: KeyboardHandlerMap = {\n [Keys.ArrowDown]: (e) => {\n e.preventDefault()\n if (filteredItems.length > 0) {\n selectedIndex = (selectedIndex + 1) % filteredItems.length\n }\n },\n [Keys.ArrowUp]: (e) => {\n e.preventDefault()\n if (filteredItems.length > 0) {\n selectedIndex = (selectedIndex - 1 + filteredItems.length) % filteredItems.length\n }\n },\n [Keys.Enter]: (e) => {\n e.preventDefault()\n doSelect()\n },\n [Keys.Escape]: (e) => {\n e.preventDefault()\n onOpenChange?.(false)\n },\n }\n\n const ariaProps: Record<string, unknown> = {\n role: 'combobox',\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'listbox',\n 'aria-owns': listId,\n id: rootId,\n }\n\n const inputAriaProps: Record<string, unknown> = {\n role: 'searchbox',\n 'aria-autocomplete': 'list',\n 'aria-controls': listId,\n id: inputId,\n }\n\n const listAriaProps: Record<string, unknown> = {\n role: 'listbox',\n id: listId,\n 'aria-label': 'Command suggestions',\n }\n\n function getItemAriaProps(item: CommandItemData, index: number): Record<string, unknown> {\n return {\n role: 'option',\n 'aria-selected': index === selectedIndex,\n 'aria-disabled': item.disabled ?? false,\n id: `${listId}-item-${item.id}`,\n }\n }\n\n return {\n get state(): CommandState {\n return {\n search: searchQuery,\n filteredItems,\n selectedIndex,\n open: isOpen,\n }\n },\n search: doSearch,\n select: doSelect,\n keyboardHandlers,\n ariaProps,\n inputAriaProps,\n listAriaProps,\n getItemAriaProps,\n ids: {\n root: rootId,\n input: inputId,\n list: listId,\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const commandVariants = cva({\n base: 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n})\n\nexport const commandInputVariants = cva({\n base: 'flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n})\n\nexport const commandItemVariants = cva({\n base: 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n variants: {\n state: {\n default: '',\n selected: 'bg-accent text-accent-foreground',\n disabled: 'pointer-events-none opacity-50',\n },\n },\n defaultVariants: {\n state: 'default',\n },\n})\n\nexport const commandGroupVariants = cva({\n base: 'overflow-hidden p-1 text-foreground',\n})\n", "import * as React from 'react'\nimport {\n createCommand,\n commandVariants,\n commandInputVariants,\n commandItemVariants,\n commandGroupVariants,\n type CommandProps as CoreCommandProps,\n type CommandItemData,\n} from '@refraction-ui/command'\nimport { cn, createKeyboardHandler, Keys, devWarn } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\n/** What a mounted CommandItem tells the root about itself. */\ninterface RegisteredItem {\n domId: string\n disabled: boolean\n select: () => void\n}\n\ninterface CommandContextValue {\n search: string\n onSearch: (query: string) => void\n selectedIndex: number\n onSelect: (index: number) => void\n items: CommandItemData[]\n filteredItems: CommandItemData[]\n /** Whether a value passes the current search. */\n matches: (value: string) => boolean\n registerItem: (value: string, item: RegisteredItem) => void\n unregisterItem: (value: string) => void\n /** DOM id of the highlighted item, for aria-activedescendant. */\n activeDescendant: string | undefined\n listId: string\n inputId: string\n}\n\nconst CommandContext = React.createContext<CommandContextValue | null>(null)\n\nfunction useCommandContext(): CommandContextValue {\n const ctx = React.useContext(CommandContext)\n if (!ctx) {\n devWarn(\n 'react-command/context-outside-provider',\n 'Command compound components (CommandInput/CommandList/CommandItem/CommandGroup/etc.) must be rendered inside a <Command>. The missing CommandContext makes this throw.',\n )\n throw new Error('Command compound components must be used within <Command>')\n }\n return ctx\n}\n\n/** An item's searchable value: its `value` prop, else its text children. */\nfunction itemValueOf(value: string | undefined, children: React.ReactNode): string {\n if (value !== undefined) return value\n if (typeof children === 'string' || typeof children === 'number') return String(children)\n return ''\n}\n\n/**\n * Collect the CommandItems present in the element tree, in order, so the\n * root knows its items on the first (and server) render. Items inside custom\n * components are not visible here; they are added when they mount.\n */\nfunction collectItems(node: React.ReactNode, into: CommandItemData[]): CommandItemData[] {\n React.Children.forEach(node, (child) => {\n if (!React.isValidElement<{ value?: string; disabled?: boolean; children?: React.ReactNode }>(child)) return\n if (child.type === CommandItem) {\n const value = itemValueOf(child.props.value, child.props.children)\n into.push({ id: value, value, label: value, disabled: child.props.disabled })\n return\n }\n collectItems(child.props.children, into)\n })\n return into\n}\n\nconst defaultFilter = (value: string, search: string) =>\n value.toLowerCase().includes(search.toLowerCase())\n\n// ---------------------------------------------------------------------------\n// Command (root provider)\n// ---------------------------------------------------------------------------\n\nexport interface CommandProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n /** Custom filter — receives an item value and the search, returns true to keep it. */\n filter?: (value: string, search: string) => boolean\n className?: string\n children?: React.ReactNode\n}\n\nexport function Command({\n open,\n onOpenChange,\n filter = defaultFilter,\n className,\n children,\n}: CommandProps) {\n const [registered, setRegistered] = React.useState<ReadonlyMap<string, RegisteredItem>>(() => new Map())\n const [search, setSearch] = React.useState('')\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n\n // Stable across renders and SSR-safe; keeps the rfr-cmd-* prefixes.\n const uid = React.useId().replace(/:/g, '')\n const listId = `rfr-cmd-list-${uid}`\n const inputId = `rfr-cmd-input-${uid}`\n const api = React.useMemo(() => createCommand({ open, onOpenChange, filter }), [open, onOpenChange, filter])\n\n const items = React.useMemo(() => {\n const all = collectItems(children, [])\n const known = new Set(all.map((i) => i.value))\n for (const [value, item] of registered) {\n if (!known.has(value)) all.push({ id: value, value, label: value, disabled: item.disabled })\n }\n return all\n }, [children, registered])\n\n const matches = React.useCallback((value: string) => !search || filter(value, search), [filter, search])\n const filteredItems = React.useMemo(() => items.filter((i) => matches(i.value)), [items, matches])\n const highlighted = filteredItems[selectedIndex]\n\n const handleSearch = React.useCallback((query: string) => {\n setSearch(query)\n setSelectedIndex(0)\n }, [])\n\n const handleSelect = React.useCallback((index: number) => {\n setSelectedIndex(index)\n }, [])\n\n const registerItem = React.useCallback((value: string, item: RegisteredItem) => {\n setRegistered((prev) => {\n const current = prev.get(value)\n if (current && current.domId === item.domId && current.disabled === item.disabled) return prev\n const next = new Map(prev)\n next.set(value, item)\n return next\n })\n }, [])\n\n const unregisterItem = React.useCallback((value: string) => {\n setRegistered((prev) => {\n if (!prev.has(value)) return prev\n const next = new Map(prev)\n next.delete(value)\n return next\n })\n }, [])\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const count = filteredItems.length\n const handler = createKeyboardHandler({\n [Keys.ArrowDown]: (ev) => {\n ev.preventDefault()\n if (count > 0) setSelectedIndex((prev) => (prev + 1) % count)\n },\n [Keys.ArrowUp]: (ev) => {\n ev.preventDefault()\n if (count > 0) setSelectedIndex((prev) => (prev - 1 + count) % count)\n },\n [Keys.Enter]: (ev) => {\n ev.preventDefault()\n if (highlighted && !highlighted.disabled) registered.get(highlighted.value)?.select()\n },\n [Keys.Escape]: (ev) => {\n ev.preventDefault()\n onOpenChange?.(false)\n },\n })\n handler(e.nativeEvent)\n }\n\n const ctx: CommandContextValue = {\n search,\n onSearch: handleSearch,\n selectedIndex,\n onSelect: handleSelect,\n items,\n filteredItems,\n matches,\n registerItem,\n unregisterItem,\n activeDescendant: highlighted ? registered.get(highlighted.value)?.domId : undefined,\n listId,\n inputId,\n }\n\n return React.createElement(\n CommandContext.Provider,\n { value: ctx },\n React.createElement(\n 'div',\n {\n className: cn(commandVariants(), className),\n ...api.ariaProps,\n 'aria-owns': listId,\n id: `rfr-cmd-${uid}`,\n onKeyDown: handleKeyDown,\n },\n children,\n ),\n )\n}\n\n// ---------------------------------------------------------------------------\n// CommandInput\n// ---------------------------------------------------------------------------\n\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nexport const CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n function CommandInput({ className, onChange, ...props }, ref) {\n const { search, onSearch, inputId, listId, activeDescendant } = useCommandContext()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onSearch(e.target.value)\n onChange?.(e)\n }\n\n return React.createElement('input', {\n ref,\n id: inputId,\n type: 'text',\n role: 'searchbox',\n 'aria-autocomplete': 'list',\n 'aria-controls': listId,\n 'aria-activedescendant': activeDescendant,\n value: search,\n onChange: handleChange,\n className: cn(commandInputVariants(), className),\n ...props,\n })\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandList\n// ---------------------------------------------------------------------------\n\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n function CommandList({ className, children, ...props }, ref) {\n const { listId } = useCommandContext()\n\n return React.createElement(\n 'div',\n {\n ref,\n id: listId,\n role: 'listbox',\n 'aria-label': 'Command suggestions',\n className: cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className),\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandEmpty\n// ---------------------------------------------------------------------------\n\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n function CommandEmpty({ className, children, ...props }, ref) {\n const { filteredItems } = useCommandContext()\n\n if (filteredItems.length > 0) return null\n\n return React.createElement(\n 'div',\n {\n ref,\n className: cn('py-6 text-center text-sm', className),\n role: 'presentation',\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandGroup\n// ---------------------------------------------------------------------------\n\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: string\n}\n\nexport const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n function CommandGroup({ className, heading, children, ...props }, ref) {\n return React.createElement(\n 'div',\n {\n ref,\n className: cn(commandGroupVariants(), className),\n role: 'group',\n 'aria-label': heading,\n ...props,\n },\n heading\n ? React.createElement(\n 'div',\n { className: 'px-2 py-1.5 text-xs font-medium text-muted-foreground' },\n heading,\n )\n : null,\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandItem\n// ---------------------------------------------------------------------------\n\nexport interface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n value?: string\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n function CommandItem(\n { className, value, disabled = false, onSelect: onItemSelect, onClick, onMouseMove, children, ...props },\n ref,\n ) {\n const { matches, filteredItems, selectedIndex, onSelect, registerItem, unregisterItem } =\n useCommandContext()\n const itemValue = itemValueOf(value, children)\n const domId = `rfr-cmd-item-${React.useId().replace(/:/g, '')}`\n\n // Latest onSelect without re-registering on every render.\n const onSelectRef = React.useRef(onItemSelect)\n onSelectRef.current = onItemSelect\n\n React.useEffect(() => {\n registerItem(itemValue, { domId, disabled, select: () => onSelectRef.current?.() })\n }, [registerItem, itemValue, domId, disabled])\n React.useEffect(() => () => unregisterItem(itemValue), [unregisterItem, itemValue])\n\n if (!matches(itemValue)) return null\n\n const index = filteredItems.findIndex((i) => i.value === itemValue)\n const isSelected = index !== -1 && index === selectedIndex\n const state = disabled ? 'disabled' : isSelected ? 'selected' : 'default'\n\n return React.createElement(\n 'div',\n {\n ref,\n id: domId,\n role: 'option',\n 'aria-selected': isSelected,\n 'aria-disabled': disabled,\n 'data-value': itemValue,\n 'data-selected': isSelected ? '' : undefined,\n className: cn(commandItemVariants({ state }), className),\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(e)\n if (!disabled && !e.defaultPrevented) onItemSelect?.()\n },\n onMouseMove: (e: React.MouseEvent<HTMLDivElement>) => {\n onMouseMove?.(e)\n if (index !== -1 && index !== selectedIndex) onSelect(index)\n },\n ...props,\n },\n children,\n )\n },\n)\n\n// ---------------------------------------------------------------------------\n// CommandSeparator\n// ---------------------------------------------------------------------------\n\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\n function CommandSeparator({ className, ...props }, ref) {\n return React.createElement('div', {\n ref,\n role: 'separator',\n className: cn('-mx-1 h-px bg-border', className),\n ...props,\n })\n },\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultFilter", "CommandInput", "CommandList", "CommandEmpty", "CommandGroup", "CommandItem", "CommandSeparator"]
7
7
  }
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  detectEmojiShortcode,
3
3
  detectTriggerInText
4
- } from "./chunk-BOLFYVI6.js";
4
+ } from "./chunk-QPCKJ2YR.js";
5
5
  import {
6
6
  searchEmojis
7
- } from "./chunk-533MCMSU.js";
7
+ } from "./chunk-3I3DYDHR.js";
8
8
  import {
9
9
  cn,
10
10
  cva,
11
11
  generateId,
12
12
  prefersReducedMotion
13
- } from "./chunk-ZF3OHCGV.js";
13
+ } from "./chunk-2Q6HHFAN.js";
14
14
 
15
15
  // ../react-composer/dist/index.js
16
16
  import * as React2 from "react";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  cva
4
- } from "./chunk-ZF3OHCGV.js";
4
+ } from "./chunk-2Q6HHFAN.js";
5
5
 
6
6
  // ../react-content-protection/dist/index.js
7
7
  import * as React from "react";
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  formatRelativeTime,
3
3
  formatTimestamp
4
- } from "./chunk-ONACRMG4.js";
4
+ } from "./chunk-XMFNBOPO.js";
5
5
  import {
6
6
  MarkdownRenderer
7
- } from "./chunk-UNEM2TRI.js";
7
+ } from "./chunk-SDAJVXD4.js";
8
8
  import {
9
9
  detectTriggerInText
10
- } from "./chunk-BOLFYVI6.js";
11
- import "./chunk-533MCMSU.js";
10
+ } from "./chunk-QPCKJ2YR.js";
11
+ import "./chunk-3I3DYDHR.js";
12
12
  import {
13
13
  cn,
14
14
  generateId
15
- } from "./chunk-ZF3OHCGV.js";
15
+ } from "./chunk-2Q6HHFAN.js";
16
16
 
17
17
  // ../react-conversation/dist/index.js
18
18
  import * as React2 from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-ZF3OHCGV.js";
3
+ } from "./chunk-2Q6HHFAN.js";
4
4
 
5
5
  // ../react-cookie-consent/dist/index.js
6
6
  import * as React2 from "react";