@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.
- package/dist/{chunk-ZF3OHCGV.js → chunk-2Q6HHFAN.js} +1 -1
- package/dist/chunk-2Q6HHFAN.js.map +7 -0
- package/dist/{chunk-533MCMSU.js → chunk-3I3DYDHR.js} +2 -2
- package/dist/{chunk-H54FLNAF.js → chunk-63N4PZUJ.js} +2 -2
- package/dist/chunk-7P7EJ56S.js +7 -0
- package/dist/{chunk-Y2FNNAIL.js → chunk-EGVPAMQU.js} +2 -2
- package/dist/chunk-EGVPAMQU.js.map +1 -0
- package/dist/{chunk-WK2IIUFO.js → chunk-QDMLIDYN.js} +2 -2
- package/dist/{chunk-BOLFYVI6.js → chunk-QPCKJ2YR.js} +2 -2
- package/dist/{chunk-TOZBR4GL.js → chunk-RSWOLRIC.js} +4 -4
- package/dist/{chunk-TOZBR4GL.js.map → chunk-RSWOLRIC.js.map} +1 -1
- package/dist/{chunk-UNEM2TRI.js → chunk-SDAJVXD4.js} +2 -2
- package/dist/{chunk-VK3EQ34F.js → chunk-V24GDHUX.js} +2 -2
- package/dist/{chunk-XWP763SH.js → chunk-V727VZOE.js} +4 -2
- package/dist/{chunk-XWP763SH.js.map → chunk-V727VZOE.js.map} +2 -2
- package/dist/{chunk-AMK4VCBG.js → chunk-WYKPPK3W.js} +2 -2
- package/dist/{chunk-ONACRMG4.js → chunk-XMFNBOPO.js} +2 -2
- package/dist/{chunk-NKCWOPNX.js → chunk-Z5IHYNQD.js} +12 -8
- package/dist/chunk-Z5IHYNQD.js.map +7 -0
- package/dist/faro-engine-VIUXJAPH-FSARIABU.js +3 -0
- package/dist/{faro-engine-47HGRAQH-JKINJPMH.js.map → faro-engine-VIUXJAPH-FSARIABU.js.map} +1 -1
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +1 -1
- package/dist/index.cjs +1305 -302
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/internal/action-list/index.d.ts +39 -0
- package/dist/internal/avatar/index.d.cts +4 -1
- package/dist/internal/avatar/index.d.ts +4 -1
- package/dist/internal/button/index.d.cts +2 -2
- package/dist/internal/button/index.d.ts +2 -2
- package/dist/internal/card/index.d.cts +5 -1
- package/dist/internal/card/index.d.ts +5 -1
- package/dist/internal/data-table/index.d.cts +48 -3
- package/dist/internal/data-table/index.d.ts +48 -3
- package/dist/internal/funnel-chart/index.d.ts +60 -0
- package/dist/internal/line-chart/index.d.ts +124 -0
- package/dist/internal/native-select/index.d.ts +21 -0
- package/dist/internal/page-header/index.d.ts +35 -0
- package/dist/internal/react-action-list/index.d.ts +28 -0
- package/dist/internal/react-avatar/index.d.cts +4 -2
- package/dist/internal/react-avatar/index.d.ts +4 -2
- package/dist/internal/react-card/index.d.cts +10 -4
- package/dist/internal/react-card/index.d.ts +10 -4
- package/dist/internal/react-command/index.d.cts +13 -2
- package/dist/internal/react-command/index.d.ts +13 -2
- package/dist/internal/react-data-table/index.d.cts +27 -9
- package/dist/internal/react-data-table/index.d.ts +27 -9
- package/dist/internal/react-dialog/index.d.cts +5 -0
- package/dist/internal/react-dialog/index.d.ts +5 -0
- package/dist/internal/react-dropdown-menu/index.d.cts +19 -1
- package/dist/internal/react-dropdown-menu/index.d.ts +19 -1
- package/dist/internal/react-funnel-chart/index.d.ts +28 -0
- package/dist/internal/react-line-chart/index.d.ts +38 -0
- package/dist/internal/react-native-select/index.d.ts +19 -0
- package/dist/internal/react-page-header/index.d.ts +23 -0
- package/dist/internal/react-select/index.d.cts +21 -3
- package/dist/internal/react-select/index.d.ts +21 -3
- package/dist/internal/react-stat-grid/index.d.ts +22 -11
- package/dist/internal/react-table/index.d.ts +39 -0
- package/dist/internal/select/index.d.cts +14 -1
- package/dist/internal/select/index.d.ts +14 -1
- package/dist/internal/shared/index.d.cts +6 -3
- package/dist/internal/shared/index.d.ts +6 -3
- package/dist/internal/stat-grid/index.d.ts +49 -7
- package/dist/internal/table/index.d.ts +46 -0
- package/dist/internal/tabs/index.d.cts +8 -1
- package/dist/internal/tabs/index.d.ts +8 -1
- package/dist/react-accordion.js +1 -1
- package/dist/react-action-list.js +74 -0
- package/dist/react-action-list.js.map +7 -0
- package/dist/react-ai.js +1 -1
- package/dist/react-analytics.js +16 -4
- package/dist/react-analytics.js.map +2 -2
- package/dist/react-animated-text.js +1 -1
- package/dist/react-app-shell.js +1 -1
- package/dist/react-audience-feature-card.js +1 -1
- package/dist/react-audio-room.js +1 -1
- package/dist/react-auth.js +1 -1
- package/dist/react-avatar-group.js +1 -1
- package/dist/react-avatar.js +13 -9
- package/dist/react-avatar.js.map +2 -2
- package/dist/react-badge.js +2 -2
- package/dist/react-badge.js.map +1 -1
- package/dist/react-bottom-nav.js +1 -1
- package/dist/react-brand-network-cell.js +1 -1
- package/dist/react-breadcrumbs.js +1 -1
- package/dist/react-browser-chrome-mock.js +1 -1
- package/dist/react-button.js +3 -3
- package/dist/react-calendar.js +1 -1
- package/dist/react-call-controls.js +1 -1
- package/dist/react-callout.js +8 -3
- package/dist/react-callout.js.map +2 -2
- package/dist/react-card-grid.js +1 -1
- package/dist/react-card.js +5 -5
- package/dist/react-card.js.map +2 -2
- package/dist/react-carousel.js +1 -1
- package/dist/react-charts.js +1 -1
- package/dist/react-checkbox.js +1 -1
- package/dist/react-checklist.js +1 -1
- package/dist/react-code-block.js +1 -1
- package/dist/react-code-editor.js +1 -1
- package/dist/react-collapsible.js +1 -1
- package/dist/react-combobox.js +1 -1
- package/dist/react-command-input.js +1 -1
- package/dist/react-command.js +115 -70
- package/dist/react-command.js.map +3 -3
- package/dist/react-composer.js +3 -3
- package/dist/react-content-protection.js +1 -1
- package/dist/react-conversation.js +5 -5
- package/dist/react-cookie-consent.js +1 -1
- package/dist/react-data-table.js +125 -114
- package/dist/react-data-table.js.map +2 -2
- package/dist/react-date-picker.js +1 -1
- package/dist/react-device-frame.js +1 -1
- package/dist/react-dialog.js +33 -9
- package/dist/react-dialog.js.map +2 -2
- package/dist/react-diff-viewer.js +1 -1
- package/dist/react-dropdown-menu.js +61 -8
- package/dist/react-dropdown-menu.js.map +3 -3
- package/dist/react-editor-status-bar.js +1 -1
- package/dist/react-editor-tabs.js +1 -1
- package/dist/react-emoji-picker.js +2 -2
- package/dist/react-empty-state.js +1 -1
- package/dist/react-feedback-dialog.js +2 -2
- package/dist/react-file-tree.js +1 -1
- package/dist/react-file-upload.js +1 -1
- package/dist/react-floating-reactions.js +1 -1
- package/dist/react-flow-editor.js +2 -2
- package/dist/react-footer.js +1 -1
- package/dist/react-funnel-chart.js +105 -0
- package/dist/react-funnel-chart.js.map +7 -0
- package/dist/react-graph-view.js +2 -2
- package/dist/react-infinite-canvas.js +2 -2
- package/dist/react-inline-editor.js +1 -1
- package/dist/react-input-group.js +1 -1
- package/dist/react-input.js +2 -2
- package/dist/react-install-prompt.js +1 -1
- package/dist/react-kanban-board.js +1 -1
- package/dist/react-keyboard-shortcut.js +2 -2
- package/dist/react-language-selector.js +1 -1
- package/dist/react-line-chart.js +280 -0
- package/dist/react-line-chart.js.map +7 -0
- package/dist/react-link-card.js +1 -1
- package/dist/react-live-captions.js +1 -1
- package/dist/react-live-cursors.js +1 -1
- package/dist/react-live-transcript.js +1 -1
- package/dist/react-location-selector.js +1 -1
- package/dist/react-logger.js +3 -3
- package/dist/react-markdown-renderer.js +2 -2
- package/dist/react-marquee-strip.js +1 -1
- package/dist/react-mascot.js +1 -1
- package/dist/react-mastery-bar.js +1 -1
- package/dist/react-mini-map.js +1 -1
- package/dist/react-mobile-nav.js +1 -1
- package/dist/react-native-select.js +52 -0
- package/dist/react-native-select.js.map +7 -0
- package/dist/react-navbar.js +1 -1
- package/dist/react-numbered-steps.js +1 -1
- package/dist/react-otp-input.js +1 -1
- package/dist/react-page-header.js +40 -0
- package/dist/react-page-header.js.map +7 -0
- package/dist/react-pagination.js +1 -1
- package/dist/react-password-input.js +2 -2
- package/dist/react-payment.js +1 -1
- package/dist/react-popover.js +1 -1
- package/dist/react-pre-call-lobby.js +1 -1
- package/dist/react-presence-indicator.js +1 -1
- package/dist/react-pricing-card.js +1 -1
- package/dist/react-progress-display.js +2 -2
- package/dist/react-progress-display.js.map +1 -1
- package/dist/react-radial-gauge.js +1 -1
- package/dist/react-radio.js +1 -1
- package/dist/react-rating-scale.js +1 -1
- package/dist/react-reaction-bar.js +1 -1
- package/dist/react-resizable-layout.js +1 -1
- package/dist/react-search-bar.js +1 -1
- package/dist/react-section-head.js +1 -1
- package/dist/react-segmented-control.js +1 -1
- package/dist/react-select.js +94 -20
- package/dist/react-select.js.map +3 -3
- package/dist/react-separator.js +1 -1
- package/dist/react-sheet.js +1 -1
- package/dist/react-sidebar.js +1 -1
- package/dist/react-skeleton.js +1 -1
- package/dist/react-skip-to-content.js +1 -1
- package/dist/react-slide-viewer.js +1 -1
- package/dist/react-slider.js +1 -1
- package/dist/react-slot-picker.js +1 -1
- package/dist/react-social-auth-button.js +3 -3
- package/dist/react-sortable-list.js +1 -1
- package/dist/react-stat-grid.js +91 -22
- package/dist/react-stat-grid.js.map +2 -2
- package/dist/react-status-indicator.js +1 -1
- package/dist/react-steps.js +1 -1
- package/dist/react-sticky-note.js +1 -1
- package/dist/react-switch.js +1 -1
- package/dist/react-table-of-contents.js +1 -1
- package/dist/react-table.js +148 -0
- package/dist/react-table.js.map +7 -0
- package/dist/react-tabs.js +84 -7
- package/dist/react-tabs.js.map +2 -2
- package/dist/react-terminal.js +1 -1
- package/dist/react-test-results.js +1 -1
- package/dist/react-textarea.js +3 -3
- package/dist/react-textarea.js.map +1 -1
- package/dist/react-thread-view.js +2 -2
- package/dist/react-timeline.js +1 -1
- package/dist/react-toast.js +1 -1
- package/dist/react-tooltip.js +1 -1
- package/dist/react-version-selector.js +1 -1
- package/dist/react-video-grid.js +2 -2
- package/dist/react-video-player.js +1 -1
- package/dist/react-video-tile.js +2 -2
- package/dist/react-voice-pill.js +1 -1
- package/dist/react-waveform.js +1 -1
- package/dist/react-wizard.js +1 -1
- package/dist/theme.js +1 -1
- package/package.json +7 -1
- package/dist/chunk-NKCWOPNX.js.map +0 -7
- package/dist/chunk-SDZ3LROZ.js +0 -7
- package/dist/chunk-Y2FNNAIL.js.map +0 -1
- package/dist/chunk-ZF3OHCGV.js.map +0 -7
- package/dist/faro-engine-47HGRAQH-JKINJPMH.js +0 -3
- /package/dist/{chunk-533MCMSU.js.map → chunk-3I3DYDHR.js.map} +0 -0
- /package/dist/{chunk-H54FLNAF.js.map → chunk-63N4PZUJ.js.map} +0 -0
- /package/dist/{chunk-SDZ3LROZ.js.map → chunk-7P7EJ56S.js.map} +0 -0
- /package/dist/{chunk-WK2IIUFO.js.map → chunk-QDMLIDYN.js.map} +0 -0
- /package/dist/{chunk-BOLFYVI6.js.map → chunk-QPCKJ2YR.js.map} +0 -0
- /package/dist/{chunk-UNEM2TRI.js.map → chunk-SDAJVXD4.js.map} +0 -0
- /package/dist/{chunk-VK3EQ34F.js.map → chunk-V24GDHUX.js.map} +0 -0
- /package/dist/{chunk-AMK4VCBG.js.map → chunk-WYKPPK3W.js.map} +0 -0
- /package/dist/{chunk-ONACRMG4.js.map → chunk-XMFNBOPO.js.map} +0 -0
package/dist/react-command.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
cva,
|
|
6
6
|
devWarn,
|
|
7
7
|
generateId
|
|
8
|
-
} from "./chunk-
|
|
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 [
|
|
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
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const 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
|
-
|
|
181
|
-
|
|
182
|
-
return
|
|
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((
|
|
186
|
-
|
|
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 =
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
|
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":
|
|
327
|
-
"aria-disabled": disabled
|
|
328
|
-
"data-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
|
-
|
|
332
|
-
|
|
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": ";;;;;;;;;;;;;AA8DA,SAAS,cAAc,OAAe,QAAyB;AAC7D,SAAO,MAAM,YAAA,EAAc,SAAS,OAAO,YAAA,CAAa;AAC1D;AAEO,SAAS,cACd,QAAsB,CAAA,GACtB,QAA2B,CAAA,GACf;AACZ,QAAM;IACJ,MAAM;IACN;IACA,SAAS;EAAA,IACP;AAEJ,QAAM,SAAS,WAAW,SAAS;AACnC,QAAM,UAAU,WAAW,eAAe;AAC1C,QAAM,SAAS,WAAW,cAAc;AAExC,MAAI,cAAc;AAClB,MAAI,gBAAgB;AACpB,MAAI,gBAAgB,CAAC,GAAG,KAAK;AAC7B,QAAM,SAAS,kBAAkB;AAEjC,WAAS,YAAY,OAAkC;AACrD,QAAI,CAAC,MAAO,QAAO,CAAC,GAAG,KAAK;AAC5B,WAAO,MAAM,OAAO,CAAC,SAAS,OAAO,KAAK,OAAO,KAAK,CAAC;EACzD;AAEA,WAAS,SAAS,OAAqB;AACrC,kBAAc;AACd,oBAAgB,YAAY,KAAK;AACjC,oBAAgB;EAClB;AAEA,WAAS,SAAS,OAA6C;AAC7D,UAAM,MAAM,SAAS;AACrB,UAAM,OAAO,cAAc,GAAG;AAC9B,QAAI,CAAC,QAAQ,KAAK,SAAU,QAAO;AACnC,WAAO;EACT;AAEA,QAAM,mBAAuC;IAC3C,CAAC,KAAK,SAAS,GAAG,CAAC,MAAM;AACvB,QAAE,eAAA;AACF,UAAI,cAAc,SAAS,GAAG;AAC5B,yBAAiB,gBAAgB,KAAK,cAAc;MACtD;IACF;IACA,CAAC,KAAK,OAAO,GAAG,CAAC,MAAM;AACrB,QAAE,eAAA;AACF,UAAI,cAAc,SAAS,GAAG;AAC5B,yBAAiB,gBAAgB,IAAI,cAAc,UAAU,cAAc;MAC7E;IACF;IACA,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM;AACnB,QAAE,eAAA;AACF,eAAA;IACF;IACA,CAAC,KAAK,MAAM,GAAG,CAAC,MAAM;AACpB,QAAE,eAAA;AACF,qBAAe,KAAK;IACtB;EAAA;AAGF,QAAM,YAAqC;IACzC,MAAM;IACN,iBAAiB;IACjB,iBAAiB;IACjB,aAAa;IACb,IAAI;EAAA;AAGN,QAAM,iBAA0C;IAC9C,MAAM;IACN,qBAAqB;IACrB,iBAAiB;IACjB,IAAI;EAAA;AAGN,QAAM,gBAAyC;IAC7C,MAAM;IACN,IAAI;IACJ,cAAc;EAAA;AAGhB,WAAS,iBAAiB,MAAuB,OAAwC;AACvF,WAAO;MACL,MAAM;MACN,iBAAiB,UAAU;MAC3B,iBAAiB,KAAK,YAAY;MAClC,IAAI,GAAG,MAAM,SAAS,KAAK,EAAE;IAAA;EAEjC;AAEA,SAAO;IACL,IAAI,QAAsB;AACxB,aAAO;QACL,QAAQ;QACR;QACA;QACA,MAAM;MAAA;IAEV;IACA,QAAQ;IACR,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA,KAAK;MACH,MAAM;MACN,OAAO;MACP,MAAM;IAAA;EACR;AAEJ;AChLO,IAAM,kBAAkB,IAAI;EACjC,MAAM;AACR,CAAC;AAEM,IAAM,uBAAuB,IAAI;EACtC,MAAM;AACR,CAAC;AAEM,IAAM,sBAAsB,IAAI;EACrC,MAAM;EACN,UAAU;IACR,OAAO;MACL,SAAS;MACT,UAAU;MACV,UAAU;IAAA;EACZ;EAEF,iBAAiB;IACf,OAAO;EAAA;AAEX,CAAC;AAEM,IAAM,uBAAuB,IAAI;EACtC,MAAM;AACR,CAAC;;;
|
|
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
|
}
|
package/dist/react-composer.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
detectEmojiShortcode,
|
|
3
3
|
detectTriggerInText
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QPCKJ2YR.js";
|
|
5
5
|
import {
|
|
6
6
|
searchEmojis
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3I3DYDHR.js";
|
|
8
8
|
import {
|
|
9
9
|
cn,
|
|
10
10
|
cva,
|
|
11
11
|
generateId,
|
|
12
12
|
prefersReducedMotion
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2Q6HHFAN.js";
|
|
14
14
|
|
|
15
15
|
// ../react-composer/dist/index.js
|
|
16
16
|
import * as React2 from "react";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatRelativeTime,
|
|
3
3
|
formatTimestamp
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XMFNBOPO.js";
|
|
5
5
|
import {
|
|
6
6
|
MarkdownRenderer
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-SDAJVXD4.js";
|
|
8
8
|
import {
|
|
9
9
|
detectTriggerInText
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-QPCKJ2YR.js";
|
|
11
|
+
import "./chunk-3I3DYDHR.js";
|
|
12
12
|
import {
|
|
13
13
|
cn,
|
|
14
14
|
generateId
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2Q6HHFAN.js";
|
|
16
16
|
|
|
17
17
|
// ../react-conversation/dist/index.js
|
|
18
18
|
import * as React2 from "react";
|