@sqlrooms/room-shell 0.28.0 → 0.28.1-rc.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/RoomShellCommandPalette.d.ts.map +1 -1
- package/dist/RoomShellCommandPalette.js +206 -12
- package/dist/RoomShellCommandPalette.js.map +1 -1
- package/dist/RoomShellSlice.d.ts +2 -1
- package/dist/RoomShellSlice.d.ts.map +1 -1
- package/dist/RoomShellSlice.js +5 -2
- package/dist/RoomShellSlice.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellCommandPalette.d.ts","sourceRoot":"","sources":["../src/RoomShellCommandPalette.tsx"],"names":[],"mappings":"AAYA,OAAO,EACL,MAAM,EAkBP,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,aAAa,EAMd,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AA8CF,iBAAS,2BAA2B,CAAC,EACnC,MAAM,EAAE,cAAc,EACtB,WAAmB,EACnB,YAAY,EACZ,WAA2C,EAC3C,YAAmC,EACnC,sBAA6B,GAC9B,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"RoomShellCommandPalette.d.ts","sourceRoot":"","sources":["../src/RoomShellCommandPalette.tsx"],"names":[],"mappings":"AAYA,OAAO,EACL,MAAM,EAkBP,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,aAAa,EAMd,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AA8CF,iBAAS,2BAA2B,CAAC,EACnC,MAAM,EAAE,cAAc,EACtB,WAAmB,EACnB,YAAY,EACZ,WAA2C,EAC3C,YAAmC,EACnC,sBAA6B,GAC9B,EAAE,4BAA4B,2CAua9B;AAED,MAAM,MAAM,kCAAkC,GAAG,IAAI,CACnD,cAAc,CAAC,OAAO,MAAM,CAAC,EAC7B,UAAU,CACX,GAAG;IACF,IAAI,CAAC,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,iBAAS,6BAA6B,CAAC,EACrC,SAAS,EACT,IAAI,EAAE,IAAkB,EACxB,aAAa,EACb,OAAO,EACP,OAAiB,EACjB,IAAa,EACb,OAAO,EACP,GAAG,WAAW,EACf,EAAE,kCAAkC,2CAyBpC;AAED,eAAO,MAAM,uBAAuB;;CAKnC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { JsonMonacoEditor } from '@sqlrooms/monaco-editor';
|
|
3
|
-
import { createRoomCommandExecutionContext, doesCommandRequireInput, exportCommandInputSchema,
|
|
3
|
+
import { createRoomCommandExecutionContext, doesCommandRequireInput, exportCommandInputSchema, getCommandKeystrokes, getCommandInputComponent, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
4
4
|
import { Button, cn, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandShortcut, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
|
|
5
5
|
import { isMacOS } from '@sqlrooms/utils';
|
|
6
6
|
import { CommandIcon } from 'lucide-react';
|
|
@@ -31,6 +31,7 @@ function RoomShellCommandPaletteBase({ isOpen: controlledOpen, defaultOpen = fal
|
|
|
31
31
|
const isOpenRef = useRef(isOpen);
|
|
32
32
|
const commandInputEditorPathPrefixRef = useRef(`inmemory://sqlrooms/command-input/${Math.random().toString(36).slice(2)}`);
|
|
33
33
|
const roomStore = useRoomStoreApi();
|
|
34
|
+
const isMac = useMemo(() => isMacOS(), []);
|
|
34
35
|
const commandRegistry = useBaseRoomShellStore((state) => state.commands.registry);
|
|
35
36
|
const commandContext = useMemo(() => createRoomCommandExecutionContext(roomStore, { surface: 'palette' }), [roomStore]);
|
|
36
37
|
const commands = useMemo(() => {
|
|
@@ -69,6 +70,33 @@ function RoomShellCommandPaletteBase({ isOpen: controlledOpen, defaultOpen = fal
|
|
|
69
70
|
return firstGroup.localeCompare(secondGroup);
|
|
70
71
|
});
|
|
71
72
|
}, [commands]);
|
|
73
|
+
const keystrokeCommandMap = useMemo(() => {
|
|
74
|
+
const nextCommandByKeystroke = new Map();
|
|
75
|
+
const duplicateKeystrokes = new Set();
|
|
76
|
+
for (const command of commands) {
|
|
77
|
+
if (!command.enabled) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
for (const keystroke of getCommandKeystrokes(command)) {
|
|
81
|
+
const normalizedKeystroke = normalizeCommandKeystroke(keystroke, isMac);
|
|
82
|
+
if (!normalizedKeystroke) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const existingCommand = nextCommandByKeystroke.get(normalizedKeystroke);
|
|
86
|
+
if (existingCommand && existingCommand.id !== command.id) {
|
|
87
|
+
duplicateKeystrokes.add(normalizedKeystroke);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (!duplicateKeystrokes.has(normalizedKeystroke)) {
|
|
91
|
+
nextCommandByKeystroke.set(normalizedKeystroke, command);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const duplicateKeystroke of duplicateKeystrokes) {
|
|
96
|
+
nextCommandByKeystroke.delete(duplicateKeystroke);
|
|
97
|
+
}
|
|
98
|
+
return nextCommandByKeystroke;
|
|
99
|
+
}, [commands, isMac]);
|
|
72
100
|
const activeInputCommand = useMemo(() => {
|
|
73
101
|
if (!activeInputCommandId) {
|
|
74
102
|
return undefined;
|
|
@@ -184,16 +212,26 @@ function RoomShellCommandPaletteBase({ isOpen: controlledOpen, defaultOpen = fal
|
|
|
184
212
|
isOpenRef.current = isOpen;
|
|
185
213
|
}, [isOpen]);
|
|
186
214
|
useEffect(() => {
|
|
187
|
-
if (!enableKeyboardShortcut) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
215
|
const onKeyDown = (event) => {
|
|
191
|
-
const
|
|
192
|
-
if (!
|
|
216
|
+
const normalizedKeystroke = normalizeKeyboardEventKeystroke(event);
|
|
217
|
+
if (!normalizedKeystroke) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (enableKeyboardShortcut &&
|
|
221
|
+
normalizedKeystroke === getPaletteToggleKeystroke(isMac)) {
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
setPaletteOpen(!isOpenRef.current);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (event.repeat || isOpenRef.current || activeInputCommandId) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const command = keystrokeCommandMap.get(normalizedKeystroke);
|
|
230
|
+
if (!command || shouldSkipCommandKeystroke(event)) {
|
|
193
231
|
return;
|
|
194
232
|
}
|
|
195
233
|
event.preventDefault();
|
|
196
|
-
|
|
234
|
+
void onSelectCommand(command);
|
|
197
235
|
};
|
|
198
236
|
// Use capture so this still works when focused widgets (e.g. Monaco)
|
|
199
237
|
// stop propagation during the bubble phase.
|
|
@@ -201,7 +239,14 @@ function RoomShellCommandPaletteBase({ isOpen: controlledOpen, defaultOpen = fal
|
|
|
201
239
|
return () => {
|
|
202
240
|
window.removeEventListener('keydown', onKeyDown, true);
|
|
203
241
|
};
|
|
204
|
-
}, [
|
|
242
|
+
}, [
|
|
243
|
+
activeInputCommandId,
|
|
244
|
+
enableKeyboardShortcut,
|
|
245
|
+
isMac,
|
|
246
|
+
keystrokeCommandMap,
|
|
247
|
+
onSelectCommand,
|
|
248
|
+
setPaletteOpen,
|
|
249
|
+
]);
|
|
205
250
|
useEffect(() => {
|
|
206
251
|
return subscribeToCommandPaletteControl((action) => {
|
|
207
252
|
if (action === 'open') {
|
|
@@ -221,9 +266,12 @@ function RoomShellCommandPaletteBase({ isOpen: controlledOpen, defaultOpen = fal
|
|
|
221
266
|
setInputError(undefined);
|
|
222
267
|
}
|
|
223
268
|
}, [activeInputCommand, activeInputCommandId, isSubmittingInput]);
|
|
224
|
-
return (_jsxs(_Fragment, { children: [_jsxs(CommandDialog, { open: isOpen, onOpenChange: setPaletteOpen, children: [_jsx(CommandInput, { placeholder: placeholder }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), groupedCommands.map(([groupName, groupCommands]) => (_jsx(CommandGroup, { heading: groupName, children: groupCommands.map((command) =>
|
|
225
|
-
|
|
226
|
-
|
|
269
|
+
return (_jsxs(_Fragment, { children: [_jsxs(CommandDialog, { open: isOpen, onOpenChange: setPaletteOpen, children: [_jsx(CommandInput, { placeholder: placeholder }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessage }), groupedCommands.map(([groupName, groupCommands]) => (_jsx(CommandGroup, { heading: groupName, children: groupCommands.map((command) => {
|
|
270
|
+
const commandShortcutLabel = getCommandKeystrokeDisplayLabel(command);
|
|
271
|
+
return (_jsxs(CommandItem, { value: getCommandSearchValue(command), disabled: !command.enabled, onSelect: () => {
|
|
272
|
+
void onSelectCommand(command);
|
|
273
|
+
}, children: [_jsxs("div", { className: "flex flex-col", children: [_jsx("span", { children: command.name }), command.description ? (_jsx("span", { className: "text-muted-foreground text-xs", children: command.description })) : null] }), commandShortcutLabel ? (_jsx(CommandShortcut, { children: commandShortcutLabel })) : null] }, command.id));
|
|
274
|
+
}) }, groupName)))] })] }), _jsx(Dialog, { open: Boolean(activeInputCommand), onOpenChange: (open) => {
|
|
227
275
|
if (!open) {
|
|
228
276
|
closeCommandInputDialog();
|
|
229
277
|
}
|
|
@@ -288,7 +336,7 @@ function getCommandSearchValue(command) {
|
|
|
288
336
|
command.name,
|
|
289
337
|
command.description,
|
|
290
338
|
command.inputDescription,
|
|
291
|
-
|
|
339
|
+
...getCommandKeystrokes(command),
|
|
292
340
|
command.id,
|
|
293
341
|
...(command.keywords ?? []),
|
|
294
342
|
]
|
|
@@ -391,4 +439,150 @@ function safeStringifyJsonValue(value) {
|
|
|
391
439
|
return '{}';
|
|
392
440
|
}
|
|
393
441
|
}
|
|
442
|
+
function getCommandKeystrokeDisplayLabel(command) {
|
|
443
|
+
const keystrokes = getCommandKeystrokes(command);
|
|
444
|
+
if (keystrokes.length === 0) {
|
|
445
|
+
return undefined;
|
|
446
|
+
}
|
|
447
|
+
return keystrokes.join(', ');
|
|
448
|
+
}
|
|
449
|
+
function getPaletteToggleKeystroke(isMac) {
|
|
450
|
+
return isMac ? 'meta+k' : 'ctrl+k';
|
|
451
|
+
}
|
|
452
|
+
function normalizeCommandKeystroke(keystroke, isMac) {
|
|
453
|
+
const tokens = keystroke
|
|
454
|
+
.split('+')
|
|
455
|
+
.map((token) => token.trim())
|
|
456
|
+
.filter(Boolean);
|
|
457
|
+
if (tokens.length === 0) {
|
|
458
|
+
return undefined;
|
|
459
|
+
}
|
|
460
|
+
let meta = false;
|
|
461
|
+
let ctrl = false;
|
|
462
|
+
let alt = false;
|
|
463
|
+
let shift = false;
|
|
464
|
+
let key;
|
|
465
|
+
for (const token of tokens) {
|
|
466
|
+
const normalizedToken = token.toLowerCase();
|
|
467
|
+
switch (normalizedToken) {
|
|
468
|
+
case 'mod':
|
|
469
|
+
case 'cmdorctrl':
|
|
470
|
+
case 'commandorcontrol':
|
|
471
|
+
if (isMac) {
|
|
472
|
+
meta = true;
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
ctrl = true;
|
|
476
|
+
}
|
|
477
|
+
continue;
|
|
478
|
+
case 'meta':
|
|
479
|
+
case 'cmd':
|
|
480
|
+
case 'command':
|
|
481
|
+
meta = true;
|
|
482
|
+
continue;
|
|
483
|
+
case 'ctrl':
|
|
484
|
+
case 'control':
|
|
485
|
+
ctrl = true;
|
|
486
|
+
continue;
|
|
487
|
+
case 'alt':
|
|
488
|
+
case 'option':
|
|
489
|
+
alt = true;
|
|
490
|
+
continue;
|
|
491
|
+
case 'shift':
|
|
492
|
+
shift = true;
|
|
493
|
+
continue;
|
|
494
|
+
default: {
|
|
495
|
+
const normalizedKey = normalizeKeystrokeKey(token);
|
|
496
|
+
if (normalizedKey) {
|
|
497
|
+
key = normalizedKey;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
if (!key) {
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
return serializeKeystroke({ meta, ctrl, alt, shift, key });
|
|
506
|
+
}
|
|
507
|
+
function normalizeKeyboardEventKeystroke(event) {
|
|
508
|
+
const key = normalizeKeystrokeKey(event.key);
|
|
509
|
+
if (!key) {
|
|
510
|
+
return undefined;
|
|
511
|
+
}
|
|
512
|
+
return serializeKeystroke({
|
|
513
|
+
meta: event.metaKey,
|
|
514
|
+
ctrl: event.ctrlKey,
|
|
515
|
+
alt: event.altKey,
|
|
516
|
+
shift: event.shiftKey,
|
|
517
|
+
key,
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
function normalizeKeystrokeKey(value) {
|
|
521
|
+
const normalizedValue = value.trim().toLowerCase();
|
|
522
|
+
if (!normalizedValue) {
|
|
523
|
+
return undefined;
|
|
524
|
+
}
|
|
525
|
+
if (normalizedValue === ' ') {
|
|
526
|
+
return 'space';
|
|
527
|
+
}
|
|
528
|
+
if (normalizedValue === 'spacebar') {
|
|
529
|
+
return 'space';
|
|
530
|
+
}
|
|
531
|
+
if (normalizedValue === 'esc') {
|
|
532
|
+
return 'escape';
|
|
533
|
+
}
|
|
534
|
+
if (normalizedValue === 'return') {
|
|
535
|
+
return 'enter';
|
|
536
|
+
}
|
|
537
|
+
if (isModifierToken(normalizedValue)) {
|
|
538
|
+
return undefined;
|
|
539
|
+
}
|
|
540
|
+
return normalizedValue;
|
|
541
|
+
}
|
|
542
|
+
function serializeKeystroke({ meta, ctrl, alt, shift, key, }) {
|
|
543
|
+
const parts = [];
|
|
544
|
+
if (meta) {
|
|
545
|
+
parts.push('meta');
|
|
546
|
+
}
|
|
547
|
+
if (ctrl) {
|
|
548
|
+
parts.push('ctrl');
|
|
549
|
+
}
|
|
550
|
+
if (alt) {
|
|
551
|
+
parts.push('alt');
|
|
552
|
+
}
|
|
553
|
+
if (shift) {
|
|
554
|
+
parts.push('shift');
|
|
555
|
+
}
|
|
556
|
+
parts.push(key);
|
|
557
|
+
return parts.join('+');
|
|
558
|
+
}
|
|
559
|
+
function isModifierToken(token) {
|
|
560
|
+
return (token === 'meta' ||
|
|
561
|
+
token === 'cmd' ||
|
|
562
|
+
token === 'command' ||
|
|
563
|
+
token === 'ctrl' ||
|
|
564
|
+
token === 'control' ||
|
|
565
|
+
token === 'alt' ||
|
|
566
|
+
token === 'option' ||
|
|
567
|
+
token === 'shift');
|
|
568
|
+
}
|
|
569
|
+
function shouldSkipCommandKeystroke(event) {
|
|
570
|
+
if (event.defaultPrevented) {
|
|
571
|
+
return true;
|
|
572
|
+
}
|
|
573
|
+
if (event.metaKey || event.ctrlKey || event.altKey) {
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
return isEditableTarget(event.target);
|
|
577
|
+
}
|
|
578
|
+
function isEditableTarget(target) {
|
|
579
|
+
if (!(target instanceof HTMLElement)) {
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
582
|
+
const tagName = target.tagName.toLowerCase();
|
|
583
|
+
return (target.isContentEditable ||
|
|
584
|
+
tagName === 'input' ||
|
|
585
|
+
tagName === 'textarea' ||
|
|
586
|
+
tagName === 'select');
|
|
587
|
+
}
|
|
394
588
|
//# sourceMappingURL=RoomShellCommandPalette.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellCommandPalette.js","sourceRoot":"","sources":["../src/RoomShellCommandPalette.tsx"],"names":[],"mappings":"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","sourcesContent":["import {JsonMonacoEditor} from '@sqlrooms/monaco-editor';\nimport {\n createRoomCommandExecutionContext,\n doesCommandRequireInput,\n exportCommandInputSchema,\n getCommandInputComponent,\n getCommandShortcut,\n RegisteredRoomCommand,\n RoomCommandExecutionContext,\n RoomCommandPortableSchema,\n useRoomStoreApi,\n} from '@sqlrooms/room-store';\nimport {\n Button,\n cn,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandShortcut,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {isMacOS} from '@sqlrooms/utils';\nimport {CommandIcon} from 'lucide-react';\nimport {\n ComponentProps,\n ComponentType,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {RoomShellSliceState, useBaseRoomShellStore} from './RoomShellSlice';\n\nconst GENERAL_COMMAND_GROUP = 'General';\n\nexport type RoomShellCommandPaletteProps = {\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n emptyMessage?: string;\n enableKeyboardShortcut?: boolean;\n};\n\ntype PaletteCommand = RegisteredRoomCommand & {\n enabled: boolean;\n};\ntype JsonSchema = {\n $schema?: string;\n title?: string;\n description?: string;\n type?: string | string[];\n enum?: unknown[];\n const?: unknown;\n default?: unknown;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n items?: JsonSchema;\n anyOf?: JsonSchema[];\n};\ntype MonacoMarker = {\n severity: number;\n};\n\nconst MONACO_MARKER_SEVERITY_ERROR = 8;\n\ntype CommandPaletteControlAction = 'open' | 'close' | 'toggle';\ntype CommandPaletteControlListener = (\n action: CommandPaletteControlAction,\n) => void;\n\nconst commandPaletteControlListeners = new Set<CommandPaletteControlListener>();\n\nfunction subscribeToCommandPaletteControl(\n listener: CommandPaletteControlListener,\n) {\n commandPaletteControlListeners.add(listener);\n return () => {\n commandPaletteControlListeners.delete(listener);\n };\n}\n\nfunction requestCommandPaletteControl(action: CommandPaletteControlAction) {\n for (const listener of commandPaletteControlListeners) {\n listener(action);\n }\n}\n\nfunction RoomShellCommandPaletteBase({\n isOpen: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No commands found.',\n enableKeyboardShortcut = true,\n}: RoomShellCommandPaletteProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [activeInputCommandId, setActiveInputCommandId] = useState<string>();\n const [inputJsonValue, setInputJsonValue] = useState('{}');\n const [inputError, setInputError] = useState<string>();\n const [hasJsonValidationErrors, setHasJsonValidationErrors] = useState(false);\n const [isSubmittingInput, setIsSubmittingInput] = useState(false);\n const isOpen = controlledOpen ?? uncontrolledOpen;\n const isOpenRef = useRef(isOpen);\n const commandInputEditorPathPrefixRef = useRef(\n `inmemory://sqlrooms/command-input/${Math.random().toString(36).slice(2)}`,\n );\n const roomStore = useRoomStoreApi<RoomShellSliceState>();\n const commandRegistry = useBaseRoomShellStore(\n (state) => state.commands.registry,\n );\n\n const commandContext = useMemo(\n () => createRoomCommandExecutionContext(roomStore, {surface: 'palette'}),\n [roomStore],\n );\n\n const commands = useMemo(() => {\n const nextCommands: PaletteCommand[] = [];\n for (const command of Object.values(commandRegistry)) {\n if (!resolveCommandVisibility(command, commandContext)) {\n continue;\n }\n nextCommands.push({\n ...command,\n enabled: resolveCommandEnabled(command, commandContext),\n });\n }\n\n nextCommands.sort((first, second) => first.name.localeCompare(second.name));\n return nextCommands;\n }, [commandContext, commandRegistry]);\n\n const groupedCommands = useMemo(() => {\n const groups = new Map<string, PaletteCommand[]>();\n for (const command of commands) {\n const groupName = command.group ?? GENERAL_COMMAND_GROUP;\n const existingGroup = groups.get(groupName);\n if (existingGroup) {\n existingGroup.push(command);\n } else {\n groups.set(groupName, [command]);\n }\n }\n\n return Array.from(groups.entries()).sort(([firstGroup], [secondGroup]) => {\n if (firstGroup === GENERAL_COMMAND_GROUP) {\n return -1;\n }\n if (secondGroup === GENERAL_COMMAND_GROUP) {\n return 1;\n }\n return firstGroup.localeCompare(secondGroup);\n });\n }, [commands]);\n\n const activeInputCommand = useMemo(() => {\n if (!activeInputCommandId) {\n return undefined;\n }\n return commands.find((command) => command.id === activeInputCommandId);\n }, [activeInputCommandId, commands]);\n const ActiveInputComponent = activeInputCommand\n ? getCommandInputComponent(activeInputCommand)\n : undefined;\n const activeInputCommandJsonSchema = useMemo(() => {\n if (!activeInputCommand?.inputSchema) {\n return undefined;\n }\n const portableInputSchema = exportCommandInputSchema(\n activeInputCommand.inputSchema,\n );\n const jsonSchema = toJsonSchema(portableInputSchema);\n if (!jsonSchema) {\n return undefined;\n }\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n title: activeInputCommand.name,\n ...jsonSchema,\n } satisfies JsonSchema;\n }, [activeInputCommand]);\n const activeInputEditorPath = useMemo(() => {\n if (!activeInputCommand) {\n return undefined;\n }\n return `${commandInputEditorPathPrefixRef.current}/${encodeURIComponent(activeInputCommand.id)}.json`;\n }, [activeInputCommand]);\n\n const setPaletteOpen = useCallback(\n (nextOpen: boolean) => {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [controlledOpen, onOpenChange],\n );\n\n const onSelectCommand = useCallback(\n async (command: PaletteCommand) => {\n if (!command.enabled) {\n return;\n }\n if (\n getCommandInputComponent(command) ||\n doesCommandRequireInput(command)\n ) {\n setPaletteOpen(false);\n setActiveInputCommandId(command.id);\n setInputJsonValue(createDefaultJsonInputValue(command));\n setInputError(undefined);\n setHasJsonValidationErrors(false);\n return;\n }\n setPaletteOpen(false);\n try {\n await roomStore\n .getState()\n .commands.executeCommand(command.id, undefined, {\n surface: 'palette',\n });\n } catch {\n // Errors are already captured by room.captureException.\n }\n },\n [roomStore, setPaletteOpen],\n );\n\n const closeCommandInputDialog = useCallback(() => {\n if (isSubmittingInput) {\n return;\n }\n setActiveInputCommandId(undefined);\n setInputError(undefined);\n setHasJsonValidationErrors(false);\n }, [isSubmittingInput]);\n\n const submitCommandInput = useCallback(\n async (input: unknown) => {\n if (!activeInputCommand) {\n return;\n }\n\n setInputError(undefined);\n setIsSubmittingInput(true);\n try {\n await roomStore\n .getState()\n .commands.executeCommand(activeInputCommand.id, input, {\n surface: 'palette',\n });\n setActiveInputCommandId(undefined);\n } catch (error) {\n setInputError(getErrorMessage(error));\n } finally {\n setIsSubmittingInput(false);\n }\n },\n [activeInputCommand, roomStore],\n );\n\n const submitJsonCommandInput = useCallback(async () => {\n if (hasJsonValidationErrors) {\n setInputError('Fix JSON validation errors before running the command.');\n return;\n }\n\n const trimmedInput = inputJsonValue.trim();\n if (!trimmedInput) {\n await submitCommandInput(undefined);\n return;\n }\n\n try {\n await submitCommandInput(JSON.parse(trimmedInput));\n } catch (error) {\n setInputError(getErrorMessage(error));\n }\n }, [hasJsonValidationErrors, inputJsonValue, submitCommandInput]);\n\n const handleJsonEditorValidate = useCallback((markers: MonacoMarker[]) => {\n const hasErrors = markers.some(\n (marker) => marker.severity === MONACO_MARKER_SEVERITY_ERROR,\n );\n setHasJsonValidationErrors(hasErrors);\n }, []);\n\n useEffect(() => {\n isOpenRef.current = isOpen;\n }, [isOpen]);\n\n useEffect(() => {\n if (!enableKeyboardShortcut) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n const isCommandPaletteShortcut =\n (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k';\n if (!isCommandPaletteShortcut) {\n return;\n }\n event.preventDefault();\n setPaletteOpen(!isOpenRef.current);\n };\n\n // Use capture so this still works when focused widgets (e.g. Monaco)\n // stop propagation during the bubble phase.\n window.addEventListener('keydown', onKeyDown, true);\n return () => {\n window.removeEventListener('keydown', onKeyDown, true);\n };\n }, [enableKeyboardShortcut, setPaletteOpen]);\n\n useEffect(() => {\n return subscribeToCommandPaletteControl((action) => {\n if (action === 'open') {\n setPaletteOpen(true);\n return;\n }\n if (action === 'close') {\n setPaletteOpen(false);\n return;\n }\n setPaletteOpen(!isOpenRef.current);\n });\n }, [setPaletteOpen]);\n\n useEffect(() => {\n if (activeInputCommandId && !activeInputCommand && !isSubmittingInput) {\n setActiveInputCommandId(undefined);\n setInputError(undefined);\n }\n }, [activeInputCommand, activeInputCommandId, isSubmittingInput]);\n\n return (\n <>\n <CommandDialog open={isOpen} onOpenChange={setPaletteOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n {groupedCommands.map(([groupName, groupCommands]) => (\n <CommandGroup key={groupName} heading={groupName}>\n {groupCommands.map((command) => (\n <CommandItem\n key={command.id}\n value={getCommandSearchValue(command)}\n disabled={!command.enabled}\n onSelect={() => {\n void onSelectCommand(command);\n }}\n >\n <div className=\"flex flex-col\">\n <span>{command.name}</span>\n {command.description ? (\n <span className=\"text-muted-foreground text-xs\">\n {command.description}\n </span>\n ) : null}\n </div>\n {getCommandShortcut(command) ? (\n <CommandShortcut>\n {getCommandShortcut(command)}\n </CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandDialog>\n\n <Dialog\n open={Boolean(activeInputCommand)}\n onOpenChange={(open) => {\n if (!open) {\n closeCommandInputDialog();\n }\n }}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {activeInputCommand?.name ?? 'Command input'}\n </DialogTitle>\n {activeInputCommand?.description ? (\n <DialogDescription>\n {activeInputCommand.description}\n </DialogDescription>\n ) : null}\n </DialogHeader>\n\n {ActiveInputComponent && activeInputCommand ? (\n <ActiveInputComponent\n commandId={activeInputCommand.id}\n commandName={activeInputCommand.name}\n isSubmitting={isSubmittingInput}\n error={inputError}\n onSubmit={(input) => {\n void submitCommandInput(input);\n }}\n onCancel={closeCommandInputDialog}\n />\n ) : (\n <>\n <DialogDescription>\n {activeInputCommand?.inputDescription ??\n 'Provide command input as a JSON value. Example: {\"panelId\":\"sql-editor\"}'}\n </DialogDescription>\n <div className=\"relative h-56 w-full rounded-md border\">\n <JsonMonacoEditor\n className=\"absolute inset-0 h-full w-full\"\n schema={activeInputCommandJsonSchema}\n value={inputJsonValue}\n path={activeInputEditorPath}\n readOnly={isSubmittingInput}\n onChange={(value) => {\n setInputJsonValue(value ?? '');\n setInputError(undefined);\n }}\n onValidate={handleJsonEditorValidate}\n options={{\n lineNumbers: 'off',\n glyphMargin: false,\n folding: false,\n wordWrap: 'on',\n tabSize: 2,\n fixedOverflowWidgets: false,\n automaticLayout: true,\n }}\n />\n </div>\n {hasJsonValidationErrors ? (\n <p className=\"text-destructive text-sm\">\n JSON input has syntax or schema validation errors.\n </p>\n ) : null}\n {inputError ? (\n <p className=\"text-destructive text-sm\">{inputError}</p>\n ) : null}\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={closeCommandInputDialog}\n disabled={isSubmittingInput}\n >\n Cancel\n </Button>\n <Button\n onClick={() => {\n void submitJsonCommandInput();\n }}\n disabled={isSubmittingInput || hasJsonValidationErrors}\n >\n Run command\n </Button>\n </DialogFooter>\n </>\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nexport type RoomShellCommandPaletteButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'children'\n> & {\n icon?: ComponentType<{className?: string}>;\n iconClassName?: string;\n tooltip?: string;\n};\n\nfunction RoomShellCommandPaletteButton({\n className,\n icon: Icon = CommandIcon,\n iconClassName,\n tooltip,\n variant = 'ghost',\n size = 'icon',\n onClick,\n ...buttonProps\n}: RoomShellCommandPaletteButtonProps) {\n const shortcutText = isMacOS() ? 'Cmd+K' : 'Ctrl+K';\n const tooltipText = tooltip ?? `Open command palette (${shortcutText})`;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant={variant}\n size={size}\n className={cn(className)}\n onClick={(event) => {\n requestCommandPaletteControl('open');\n onClick?.(event);\n }}\n aria-label=\"Open command palette\"\n {...buttonProps}\n >\n <Icon className={cn('h-5 w-5', iconClassName)} />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{tooltipText}</TooltipContent>\n </Tooltip>\n );\n}\n\nexport const RoomShellCommandPalette = Object.assign(\n RoomShellCommandPaletteBase,\n {\n Button: RoomShellCommandPaletteButton,\n },\n);\n\nfunction resolveCommandVisibility(\n command: RegisteredRoomCommand,\n context: RoomCommandExecutionContext,\n): boolean {\n if (command.ui?.hidden) {\n return false;\n }\n if (!command.isVisible) {\n return true;\n }\n try {\n return command.isVisible(context);\n } catch (error) {\n context.getState().room.captureException(error);\n return false;\n }\n}\n\nfunction resolveCommandEnabled(\n command: RegisteredRoomCommand,\n context: RoomCommandExecutionContext,\n): boolean {\n if (!command.isEnabled) {\n return true;\n }\n try {\n return command.isEnabled(context);\n } catch (error) {\n context.getState().room.captureException(error);\n return false;\n }\n}\n\nfunction getCommandSearchValue(command: RegisteredRoomCommand): string {\n return [\n command.name,\n command.description,\n command.inputDescription,\n getCommandShortcut(command),\n command.id,\n ...(command.keywords ?? []),\n ]\n .filter((value): value is string => Boolean(value))\n .join(' ');\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction createDefaultJsonInputValue(command: RegisteredRoomCommand): string {\n const portableInputSchema = exportCommandInputSchema(command.inputSchema);\n const jsonSchema = toJsonSchema(portableInputSchema);\n const inputTemplate = createInputTemplateFromSchema(jsonSchema);\n return safeStringifyJsonValue(inputTemplate ?? {});\n}\n\nfunction toJsonSchema(\n portableSchema?: RoomCommandPortableSchema,\n): JsonSchema | undefined {\n if (!portableSchema) {\n return undefined;\n }\n return portableSchema as JsonSchema;\n}\n\nfunction createInputTemplateFromSchema(schema?: JsonSchema): unknown {\n if (!schema) {\n return {};\n }\n if (schema.default !== undefined) {\n return schema.default;\n }\n if (schema.const !== undefined) {\n return schema.const;\n }\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n if (schema.anyOf && schema.anyOf.length > 0) {\n for (const variant of schema.anyOf) {\n const value = createInputTemplateFromSchema(variant);\n if (value !== undefined) {\n return value;\n }\n }\n }\n\n const schemaType = resolveSchemaType(schema.type);\n switch (schemaType) {\n case 'object': {\n const properties = schema.properties ?? {};\n const requiredPropertyNames = new Set(schema.required ?? []);\n const propertyEntries = Object.entries(properties);\n const objectValue: Record<string, unknown> = {};\n\n for (const [propertyName, propertySchema] of propertyEntries) {\n if (\n requiredPropertyNames.size > 0 &&\n !requiredPropertyNames.has(propertyName)\n ) {\n continue;\n }\n objectValue[propertyName] =\n createInputTemplateFromSchema(propertySchema);\n }\n\n // If there are no required keys, include the first optional key as a hint.\n if (\n Object.keys(objectValue).length === 0 &&\n requiredPropertyNames.size === 0 &&\n propertyEntries.length > 0\n ) {\n const firstProperty = propertyEntries[0];\n if (firstProperty) {\n const [firstPropertyName, firstPropertySchema] = firstProperty;\n objectValue[firstPropertyName] =\n createInputTemplateFromSchema(firstPropertySchema);\n }\n }\n\n return objectValue;\n }\n case 'array':\n return [];\n case 'string':\n return '';\n case 'number':\n case 'integer':\n return 0;\n case 'boolean':\n return false;\n case 'null':\n return null;\n default:\n return {};\n }\n}\n\nfunction resolveSchemaType(type: JsonSchema['type']): string | undefined {\n if (Array.isArray(type)) {\n return type.find((variant) => variant !== 'null') ?? type[0];\n }\n return type;\n}\n\nfunction safeStringifyJsonValue(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return '{}';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomShellCommandPalette.js","sourceRoot":"","sources":["../src/RoomShellCommandPalette.tsx"],"names":[],"mappings":"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","sourcesContent":["import {JsonMonacoEditor} from '@sqlrooms/monaco-editor';\nimport {\n createRoomCommandExecutionContext,\n doesCommandRequireInput,\n exportCommandInputSchema,\n getCommandKeystrokes,\n getCommandInputComponent,\n RegisteredRoomCommand,\n RoomCommandExecutionContext,\n RoomCommandPortableSchema,\n useRoomStoreApi,\n} from '@sqlrooms/room-store';\nimport {\n Button,\n cn,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandShortcut,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {isMacOS} from '@sqlrooms/utils';\nimport {CommandIcon} from 'lucide-react';\nimport {\n ComponentProps,\n ComponentType,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {RoomShellSliceState, useBaseRoomShellStore} from './RoomShellSlice';\n\nconst GENERAL_COMMAND_GROUP = 'General';\n\nexport type RoomShellCommandPaletteProps = {\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n emptyMessage?: string;\n enableKeyboardShortcut?: boolean;\n};\n\ntype PaletteCommand = RegisteredRoomCommand & {\n enabled: boolean;\n};\ntype JsonSchema = {\n $schema?: string;\n title?: string;\n description?: string;\n type?: string | string[];\n enum?: unknown[];\n const?: unknown;\n default?: unknown;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n items?: JsonSchema;\n anyOf?: JsonSchema[];\n};\ntype MonacoMarker = {\n severity: number;\n};\n\nconst MONACO_MARKER_SEVERITY_ERROR = 8;\n\ntype CommandPaletteControlAction = 'open' | 'close' | 'toggle';\ntype CommandPaletteControlListener = (\n action: CommandPaletteControlAction,\n) => void;\n\nconst commandPaletteControlListeners = new Set<CommandPaletteControlListener>();\n\nfunction subscribeToCommandPaletteControl(\n listener: CommandPaletteControlListener,\n) {\n commandPaletteControlListeners.add(listener);\n return () => {\n commandPaletteControlListeners.delete(listener);\n };\n}\n\nfunction requestCommandPaletteControl(action: CommandPaletteControlAction) {\n for (const listener of commandPaletteControlListeners) {\n listener(action);\n }\n}\n\nfunction RoomShellCommandPaletteBase({\n isOpen: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No commands found.',\n enableKeyboardShortcut = true,\n}: RoomShellCommandPaletteProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [activeInputCommandId, setActiveInputCommandId] = useState<string>();\n const [inputJsonValue, setInputJsonValue] = useState('{}');\n const [inputError, setInputError] = useState<string>();\n const [hasJsonValidationErrors, setHasJsonValidationErrors] = useState(false);\n const [isSubmittingInput, setIsSubmittingInput] = useState(false);\n const isOpen = controlledOpen ?? uncontrolledOpen;\n const isOpenRef = useRef(isOpen);\n const commandInputEditorPathPrefixRef = useRef(\n `inmemory://sqlrooms/command-input/${Math.random().toString(36).slice(2)}`,\n );\n const roomStore = useRoomStoreApi<RoomShellSliceState>();\n const isMac = useMemo(() => isMacOS(), []);\n const commandRegistry = useBaseRoomShellStore(\n (state) => state.commands.registry,\n );\n\n const commandContext = useMemo(\n () => createRoomCommandExecutionContext(roomStore, {surface: 'palette'}),\n [roomStore],\n );\n\n const commands = useMemo(() => {\n const nextCommands: PaletteCommand[] = [];\n for (const command of Object.values(commandRegistry)) {\n if (!resolveCommandVisibility(command, commandContext)) {\n continue;\n }\n nextCommands.push({\n ...command,\n enabled: resolveCommandEnabled(command, commandContext),\n });\n }\n\n nextCommands.sort((first, second) => first.name.localeCompare(second.name));\n return nextCommands;\n }, [commandContext, commandRegistry]);\n\n const groupedCommands = useMemo(() => {\n const groups = new Map<string, PaletteCommand[]>();\n for (const command of commands) {\n const groupName = command.group ?? GENERAL_COMMAND_GROUP;\n const existingGroup = groups.get(groupName);\n if (existingGroup) {\n existingGroup.push(command);\n } else {\n groups.set(groupName, [command]);\n }\n }\n\n return Array.from(groups.entries()).sort(([firstGroup], [secondGroup]) => {\n if (firstGroup === GENERAL_COMMAND_GROUP) {\n return -1;\n }\n if (secondGroup === GENERAL_COMMAND_GROUP) {\n return 1;\n }\n return firstGroup.localeCompare(secondGroup);\n });\n }, [commands]);\n\n const keystrokeCommandMap = useMemo(() => {\n const nextCommandByKeystroke = new Map<string, PaletteCommand>();\n const duplicateKeystrokes = new Set<string>();\n\n for (const command of commands) {\n if (!command.enabled) {\n continue;\n }\n for (const keystroke of getCommandKeystrokes(command)) {\n const normalizedKeystroke = normalizeCommandKeystroke(keystroke, isMac);\n if (!normalizedKeystroke) {\n continue;\n }\n const existingCommand = nextCommandByKeystroke.get(normalizedKeystroke);\n if (existingCommand && existingCommand.id !== command.id) {\n duplicateKeystrokes.add(normalizedKeystroke);\n continue;\n }\n if (!duplicateKeystrokes.has(normalizedKeystroke)) {\n nextCommandByKeystroke.set(normalizedKeystroke, command);\n }\n }\n }\n\n for (const duplicateKeystroke of duplicateKeystrokes) {\n nextCommandByKeystroke.delete(duplicateKeystroke);\n }\n\n return nextCommandByKeystroke;\n }, [commands, isMac]);\n\n const activeInputCommand = useMemo(() => {\n if (!activeInputCommandId) {\n return undefined;\n }\n return commands.find((command) => command.id === activeInputCommandId);\n }, [activeInputCommandId, commands]);\n const ActiveInputComponent = activeInputCommand\n ? getCommandInputComponent(activeInputCommand)\n : undefined;\n const activeInputCommandJsonSchema = useMemo(() => {\n if (!activeInputCommand?.inputSchema) {\n return undefined;\n }\n const portableInputSchema = exportCommandInputSchema(\n activeInputCommand.inputSchema,\n );\n const jsonSchema = toJsonSchema(portableInputSchema);\n if (!jsonSchema) {\n return undefined;\n }\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n title: activeInputCommand.name,\n ...jsonSchema,\n } satisfies JsonSchema;\n }, [activeInputCommand]);\n const activeInputEditorPath = useMemo(() => {\n if (!activeInputCommand) {\n return undefined;\n }\n return `${commandInputEditorPathPrefixRef.current}/${encodeURIComponent(activeInputCommand.id)}.json`;\n }, [activeInputCommand]);\n\n const setPaletteOpen = useCallback(\n (nextOpen: boolean) => {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [controlledOpen, onOpenChange],\n );\n\n const onSelectCommand = useCallback(\n async (command: PaletteCommand) => {\n if (!command.enabled) {\n return;\n }\n if (\n getCommandInputComponent(command) ||\n doesCommandRequireInput(command)\n ) {\n setPaletteOpen(false);\n setActiveInputCommandId(command.id);\n setInputJsonValue(createDefaultJsonInputValue(command));\n setInputError(undefined);\n setHasJsonValidationErrors(false);\n return;\n }\n setPaletteOpen(false);\n try {\n await roomStore\n .getState()\n .commands.executeCommand(command.id, undefined, {\n surface: 'palette',\n });\n } catch {\n // Errors are already captured by room.captureException.\n }\n },\n [roomStore, setPaletteOpen],\n );\n\n const closeCommandInputDialog = useCallback(() => {\n if (isSubmittingInput) {\n return;\n }\n setActiveInputCommandId(undefined);\n setInputError(undefined);\n setHasJsonValidationErrors(false);\n }, [isSubmittingInput]);\n\n const submitCommandInput = useCallback(\n async (input: unknown) => {\n if (!activeInputCommand) {\n return;\n }\n\n setInputError(undefined);\n setIsSubmittingInput(true);\n try {\n await roomStore\n .getState()\n .commands.executeCommand(activeInputCommand.id, input, {\n surface: 'palette',\n });\n setActiveInputCommandId(undefined);\n } catch (error) {\n setInputError(getErrorMessage(error));\n } finally {\n setIsSubmittingInput(false);\n }\n },\n [activeInputCommand, roomStore],\n );\n\n const submitJsonCommandInput = useCallback(async () => {\n if (hasJsonValidationErrors) {\n setInputError('Fix JSON validation errors before running the command.');\n return;\n }\n\n const trimmedInput = inputJsonValue.trim();\n if (!trimmedInput) {\n await submitCommandInput(undefined);\n return;\n }\n\n try {\n await submitCommandInput(JSON.parse(trimmedInput));\n } catch (error) {\n setInputError(getErrorMessage(error));\n }\n }, [hasJsonValidationErrors, inputJsonValue, submitCommandInput]);\n\n const handleJsonEditorValidate = useCallback((markers: MonacoMarker[]) => {\n const hasErrors = markers.some(\n (marker) => marker.severity === MONACO_MARKER_SEVERITY_ERROR,\n );\n setHasJsonValidationErrors(hasErrors);\n }, []);\n\n useEffect(() => {\n isOpenRef.current = isOpen;\n }, [isOpen]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n const normalizedKeystroke = normalizeKeyboardEventKeystroke(event);\n if (!normalizedKeystroke) {\n return;\n }\n\n if (\n enableKeyboardShortcut &&\n normalizedKeystroke === getPaletteToggleKeystroke(isMac)\n ) {\n event.preventDefault();\n setPaletteOpen(!isOpenRef.current);\n return;\n }\n\n if (event.repeat || isOpenRef.current || activeInputCommandId) {\n return;\n }\n\n const command = keystrokeCommandMap.get(normalizedKeystroke);\n if (!command || shouldSkipCommandKeystroke(event)) {\n return;\n }\n event.preventDefault();\n void onSelectCommand(command);\n };\n\n // Use capture so this still works when focused widgets (e.g. Monaco)\n // stop propagation during the bubble phase.\n window.addEventListener('keydown', onKeyDown, true);\n return () => {\n window.removeEventListener('keydown', onKeyDown, true);\n };\n }, [\n activeInputCommandId,\n enableKeyboardShortcut,\n isMac,\n keystrokeCommandMap,\n onSelectCommand,\n setPaletteOpen,\n ]);\n\n useEffect(() => {\n return subscribeToCommandPaletteControl((action) => {\n if (action === 'open') {\n setPaletteOpen(true);\n return;\n }\n if (action === 'close') {\n setPaletteOpen(false);\n return;\n }\n setPaletteOpen(!isOpenRef.current);\n });\n }, [setPaletteOpen]);\n\n useEffect(() => {\n if (activeInputCommandId && !activeInputCommand && !isSubmittingInput) {\n setActiveInputCommandId(undefined);\n setInputError(undefined);\n }\n }, [activeInputCommand, activeInputCommandId, isSubmittingInput]);\n\n return (\n <>\n <CommandDialog open={isOpen} onOpenChange={setPaletteOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n {groupedCommands.map(([groupName, groupCommands]) => (\n <CommandGroup key={groupName} heading={groupName}>\n {groupCommands.map((command) => {\n const commandShortcutLabel =\n getCommandKeystrokeDisplayLabel(command);\n return (\n <CommandItem\n key={command.id}\n value={getCommandSearchValue(command)}\n disabled={!command.enabled}\n onSelect={() => {\n void onSelectCommand(command);\n }}\n >\n <div className=\"flex flex-col\">\n <span>{command.name}</span>\n {command.description ? (\n <span className=\"text-muted-foreground text-xs\">\n {command.description}\n </span>\n ) : null}\n </div>\n {commandShortcutLabel ? (\n <CommandShortcut>{commandShortcutLabel}</CommandShortcut>\n ) : null}\n </CommandItem>\n );\n })}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandDialog>\n\n <Dialog\n open={Boolean(activeInputCommand)}\n onOpenChange={(open) => {\n if (!open) {\n closeCommandInputDialog();\n }\n }}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {activeInputCommand?.name ?? 'Command input'}\n </DialogTitle>\n {activeInputCommand?.description ? (\n <DialogDescription>\n {activeInputCommand.description}\n </DialogDescription>\n ) : null}\n </DialogHeader>\n\n {ActiveInputComponent && activeInputCommand ? (\n <ActiveInputComponent\n commandId={activeInputCommand.id}\n commandName={activeInputCommand.name}\n isSubmitting={isSubmittingInput}\n error={inputError}\n onSubmit={(input) => {\n void submitCommandInput(input);\n }}\n onCancel={closeCommandInputDialog}\n />\n ) : (\n <>\n <DialogDescription>\n {activeInputCommand?.inputDescription ??\n 'Provide command input as a JSON value. Example: {\"panelId\":\"sql-editor\"}'}\n </DialogDescription>\n <div className=\"relative h-56 w-full rounded-md border\">\n <JsonMonacoEditor\n className=\"absolute inset-0 h-full w-full\"\n schema={activeInputCommandJsonSchema}\n value={inputJsonValue}\n path={activeInputEditorPath}\n readOnly={isSubmittingInput}\n onChange={(value) => {\n setInputJsonValue(value ?? '');\n setInputError(undefined);\n }}\n onValidate={handleJsonEditorValidate}\n options={{\n lineNumbers: 'off',\n glyphMargin: false,\n folding: false,\n wordWrap: 'on',\n tabSize: 2,\n fixedOverflowWidgets: false,\n automaticLayout: true,\n }}\n />\n </div>\n {hasJsonValidationErrors ? (\n <p className=\"text-destructive text-sm\">\n JSON input has syntax or schema validation errors.\n </p>\n ) : null}\n {inputError ? (\n <p className=\"text-destructive text-sm\">{inputError}</p>\n ) : null}\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={closeCommandInputDialog}\n disabled={isSubmittingInput}\n >\n Cancel\n </Button>\n <Button\n onClick={() => {\n void submitJsonCommandInput();\n }}\n disabled={isSubmittingInput || hasJsonValidationErrors}\n >\n Run command\n </Button>\n </DialogFooter>\n </>\n )}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nexport type RoomShellCommandPaletteButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'children'\n> & {\n icon?: ComponentType<{className?: string}>;\n iconClassName?: string;\n tooltip?: string;\n};\n\nfunction RoomShellCommandPaletteButton({\n className,\n icon: Icon = CommandIcon,\n iconClassName,\n tooltip,\n variant = 'ghost',\n size = 'icon',\n onClick,\n ...buttonProps\n}: RoomShellCommandPaletteButtonProps) {\n const shortcutText = isMacOS() ? 'Cmd+K' : 'Ctrl+K';\n const tooltipText = tooltip ?? `Open command palette (${shortcutText})`;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant={variant}\n size={size}\n className={cn(className)}\n onClick={(event) => {\n requestCommandPaletteControl('open');\n onClick?.(event);\n }}\n aria-label=\"Open command palette\"\n {...buttonProps}\n >\n <Icon className={cn('h-5 w-5', iconClassName)} />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{tooltipText}</TooltipContent>\n </Tooltip>\n );\n}\n\nexport const RoomShellCommandPalette = Object.assign(\n RoomShellCommandPaletteBase,\n {\n Button: RoomShellCommandPaletteButton,\n },\n);\n\nfunction resolveCommandVisibility(\n command: RegisteredRoomCommand,\n context: RoomCommandExecutionContext,\n): boolean {\n if (command.ui?.hidden) {\n return false;\n }\n if (!command.isVisible) {\n return true;\n }\n try {\n return command.isVisible(context);\n } catch (error) {\n context.getState().room.captureException(error);\n return false;\n }\n}\n\nfunction resolveCommandEnabled(\n command: RegisteredRoomCommand,\n context: RoomCommandExecutionContext,\n): boolean {\n if (!command.isEnabled) {\n return true;\n }\n try {\n return command.isEnabled(context);\n } catch (error) {\n context.getState().room.captureException(error);\n return false;\n }\n}\n\nfunction getCommandSearchValue(command: RegisteredRoomCommand): string {\n return [\n command.name,\n command.description,\n command.inputDescription,\n ...getCommandKeystrokes(command),\n command.id,\n ...(command.keywords ?? []),\n ]\n .filter((value): value is string => Boolean(value))\n .join(' ');\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction createDefaultJsonInputValue(command: RegisteredRoomCommand): string {\n const portableInputSchema = exportCommandInputSchema(command.inputSchema);\n const jsonSchema = toJsonSchema(portableInputSchema);\n const inputTemplate = createInputTemplateFromSchema(jsonSchema);\n return safeStringifyJsonValue(inputTemplate ?? {});\n}\n\nfunction toJsonSchema(\n portableSchema?: RoomCommandPortableSchema,\n): JsonSchema | undefined {\n if (!portableSchema) {\n return undefined;\n }\n return portableSchema as JsonSchema;\n}\n\nfunction createInputTemplateFromSchema(schema?: JsonSchema): unknown {\n if (!schema) {\n return {};\n }\n if (schema.default !== undefined) {\n return schema.default;\n }\n if (schema.const !== undefined) {\n return schema.const;\n }\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n if (schema.anyOf && schema.anyOf.length > 0) {\n for (const variant of schema.anyOf) {\n const value = createInputTemplateFromSchema(variant);\n if (value !== undefined) {\n return value;\n }\n }\n }\n\n const schemaType = resolveSchemaType(schema.type);\n switch (schemaType) {\n case 'object': {\n const properties = schema.properties ?? {};\n const requiredPropertyNames = new Set(schema.required ?? []);\n const propertyEntries = Object.entries(properties);\n const objectValue: Record<string, unknown> = {};\n\n for (const [propertyName, propertySchema] of propertyEntries) {\n if (\n requiredPropertyNames.size > 0 &&\n !requiredPropertyNames.has(propertyName)\n ) {\n continue;\n }\n objectValue[propertyName] =\n createInputTemplateFromSchema(propertySchema);\n }\n\n // If there are no required keys, include the first optional key as a hint.\n if (\n Object.keys(objectValue).length === 0 &&\n requiredPropertyNames.size === 0 &&\n propertyEntries.length > 0\n ) {\n const firstProperty = propertyEntries[0];\n if (firstProperty) {\n const [firstPropertyName, firstPropertySchema] = firstProperty;\n objectValue[firstPropertyName] =\n createInputTemplateFromSchema(firstPropertySchema);\n }\n }\n\n return objectValue;\n }\n case 'array':\n return [];\n case 'string':\n return '';\n case 'number':\n case 'integer':\n return 0;\n case 'boolean':\n return false;\n case 'null':\n return null;\n default:\n return {};\n }\n}\n\nfunction resolveSchemaType(type: JsonSchema['type']): string | undefined {\n if (Array.isArray(type)) {\n return type.find((variant) => variant !== 'null') ?? type[0];\n }\n return type;\n}\n\nfunction safeStringifyJsonValue(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return '{}';\n }\n}\n\nfunction getCommandKeystrokeDisplayLabel(\n command: RegisteredRoomCommand,\n): string | undefined {\n const keystrokes = getCommandKeystrokes(command);\n if (keystrokes.length === 0) {\n return undefined;\n }\n return keystrokes.join(', ');\n}\n\nfunction getPaletteToggleKeystroke(isMac: boolean): string {\n return isMac ? 'meta+k' : 'ctrl+k';\n}\n\nfunction normalizeCommandKeystroke(\n keystroke: string,\n isMac: boolean,\n): string | undefined {\n const tokens = keystroke\n .split('+')\n .map((token) => token.trim())\n .filter(Boolean);\n if (tokens.length === 0) {\n return undefined;\n }\n\n let meta = false;\n let ctrl = false;\n let alt = false;\n let shift = false;\n let key: string | undefined;\n\n for (const token of tokens) {\n const normalizedToken = token.toLowerCase();\n switch (normalizedToken) {\n case 'mod':\n case 'cmdorctrl':\n case 'commandorcontrol':\n if (isMac) {\n meta = true;\n } else {\n ctrl = true;\n }\n continue;\n case 'meta':\n case 'cmd':\n case 'command':\n meta = true;\n continue;\n case 'ctrl':\n case 'control':\n ctrl = true;\n continue;\n case 'alt':\n case 'option':\n alt = true;\n continue;\n case 'shift':\n shift = true;\n continue;\n default: {\n const normalizedKey = normalizeKeystrokeKey(token);\n if (normalizedKey) {\n key = normalizedKey;\n }\n }\n }\n }\n\n if (!key) {\n return undefined;\n }\n return serializeKeystroke({meta, ctrl, alt, shift, key});\n}\n\nfunction normalizeKeyboardEventKeystroke(\n event: KeyboardEvent,\n): string | undefined {\n const key = normalizeKeystrokeKey(event.key);\n if (!key) {\n return undefined;\n }\n return serializeKeystroke({\n meta: event.metaKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n shift: event.shiftKey,\n key,\n });\n}\n\nfunction normalizeKeystrokeKey(value: string): string | undefined {\n const normalizedValue = value.trim().toLowerCase();\n if (!normalizedValue) {\n return undefined;\n }\n if (normalizedValue === ' ') {\n return 'space';\n }\n if (normalizedValue === 'spacebar') {\n return 'space';\n }\n if (normalizedValue === 'esc') {\n return 'escape';\n }\n if (normalizedValue === 'return') {\n return 'enter';\n }\n if (isModifierToken(normalizedValue)) {\n return undefined;\n }\n return normalizedValue;\n}\n\nfunction serializeKeystroke({\n meta,\n ctrl,\n alt,\n shift,\n key,\n}: {\n meta: boolean;\n ctrl: boolean;\n alt: boolean;\n shift: boolean;\n key: string;\n}): string {\n const parts: string[] = [];\n if (meta) {\n parts.push('meta');\n }\n if (ctrl) {\n parts.push('ctrl');\n }\n if (alt) {\n parts.push('alt');\n }\n if (shift) {\n parts.push('shift');\n }\n parts.push(key);\n return parts.join('+');\n}\n\nfunction isModifierToken(token: string): boolean {\n return (\n token === 'meta' ||\n token === 'cmd' ||\n token === 'command' ||\n token === 'ctrl' ||\n token === 'control' ||\n token === 'alt' ||\n token === 'option' ||\n token === 'shift'\n );\n}\n\nfunction shouldSkipCommandKeystroke(event: KeyboardEvent): boolean {\n if (event.defaultPrevented) {\n return true;\n }\n if (event.metaKey || event.ctrlKey || event.altKey) {\n return false;\n }\n return isEditableTarget(event.target);\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n const tagName = target.tagName.toLowerCase();\n return (\n target.isContentEditable ||\n tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select'\n );\n}\n"]}
|
package/dist/RoomShellSlice.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DataTable, DuckDbConnector, DuckDbSliceState, LoadFileOptions } from '@sqlrooms/duckdb';
|
|
2
2
|
import { CreateLayoutSliceProps, LayoutSliceState } from '@sqlrooms/layout';
|
|
3
3
|
import { BaseRoomConfig, DataSource, FileDataSource, LayoutConfig } from '@sqlrooms/room-config';
|
|
4
|
-
import { BaseRoomStoreState, CommandSliceState, CreateBaseRoomSliceProps } from '@sqlrooms/room-store';
|
|
4
|
+
import { BaseRoomStoreState, CommandSliceState, CreateCommandSliceProps, CreateBaseRoomSliceProps } from '@sqlrooms/room-store';
|
|
5
5
|
import { ProgressInfo } from '@sqlrooms/utils';
|
|
6
6
|
import { ReactNode } from 'react';
|
|
7
7
|
import { StateCreator, StoreApi } from 'zustand';
|
|
@@ -98,6 +98,7 @@ type CreateRoomShellSliceProps = CreateBaseRoomSliceProps & {
|
|
|
98
98
|
layout?: CreateLayoutSliceProps;
|
|
99
99
|
fileDataSourceLoader?: RoomShellSliceState['room']['fileDataSourceLoader'];
|
|
100
100
|
CustomErrorBoundary?: RoomShellSliceState['room']['CustomErrorBoundary'];
|
|
101
|
+
createCommandProps?: CreateCommandSliceProps;
|
|
101
102
|
/** @deprecated Use direct props instead e.g. layout.panels */
|
|
102
103
|
room?: Partial<Pick<LayoutSliceState['layout'], 'panels'>>;
|
|
103
104
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellSlice.d.ts","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RoomShellSlice.d.ts","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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"}
|
package/dist/RoomShellSlice.js
CHANGED
|
@@ -40,7 +40,7 @@ const RoomAddSqlDataSourceInput = z.object({
|
|
|
40
40
|
});
|
|
41
41
|
export function createRoomShellSlice(props) {
|
|
42
42
|
const slice = (set, get, store) => {
|
|
43
|
-
const { connector, config: configProps, layout: layoutProps, room: deprecatedRoomProps, fileDataSourceLoader, CustomErrorBoundary = ErrorBoundary, captureException = (exception) => console.error(exception), ...restProps } = props;
|
|
43
|
+
const { connector, config: configProps, layout: layoutProps, room: deprecatedRoomProps, fileDataSourceLoader, CustomErrorBoundary = ErrorBoundary, createCommandProps, captureException = (exception) => console.error(exception), ...restProps } = props;
|
|
44
44
|
const createLayoutProps = {
|
|
45
45
|
...layoutProps,
|
|
46
46
|
config: layoutProps?.config ?? configProps?.layout,
|
|
@@ -53,7 +53,7 @@ export function createRoomShellSlice(props) {
|
|
|
53
53
|
...roomSliceState,
|
|
54
54
|
...createDuckDbSlice({ connector })(set, get, store),
|
|
55
55
|
...createLayoutSlice(createLayoutProps)(set, get, store),
|
|
56
|
-
...createCommandSlice()(set, get, store),
|
|
56
|
+
...createCommandSlice(createCommandProps)(set, get, store),
|
|
57
57
|
room: {
|
|
58
58
|
...roomSliceState.room,
|
|
59
59
|
config: {
|
|
@@ -459,6 +459,9 @@ function createRoomShellCommands() {
|
|
|
459
459
|
keywords: ['room', 'title', 'name'],
|
|
460
460
|
inputSchema: RoomSetTitleCommandInput,
|
|
461
461
|
inputDescription: 'Provide a non-empty room title.',
|
|
462
|
+
ui: {
|
|
463
|
+
keystrokes: 'Mod+Alt+Shift+T',
|
|
464
|
+
},
|
|
462
465
|
metadata: {
|
|
463
466
|
readOnly: false,
|
|
464
467
|
idempotent: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomShellSlice.js","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DataTable,\n DuckDbConnector,\n DuckDbSliceState,\n LoadFileOptions,\n createDuckDbSlice,\n} from '@sqlrooms/duckdb';\nimport {\n CreateLayoutSliceProps,\n LayoutSliceState,\n createLayoutSlice,\n} from '@sqlrooms/layout';\nimport {\n BaseRoomConfig,\n DataSource,\n DataSourceTypes,\n FileDataSource,\n LayoutConfig,\n SqlQueryDataSource,\n UrlDataSource,\n createDefaultBaseRoomConfig,\n isFileDataSource,\n isSqlQueryDataSource,\n isUrlDataSource,\n} from '@sqlrooms/room-config';\nimport {\n BaseRoomStoreState,\n CommandSliceState,\n CreateBaseRoomSliceProps,\n createBaseRoomSlice,\n createCommandSlice,\n isRoomSliceWithInitialize,\n registerCommandsForOwner,\n RoomCommand,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {ErrorBoundary} from '@sqlrooms/ui';\nimport {\n ProgressInfo,\n convertToUniqueColumnOrTableName,\n convertToValidColumnOrTableName,\n downloadFile,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {ReactNode} from 'react';\nimport {z} from 'zod';\nimport {StateCreator, StoreApi} from 'zustand';\nimport {\n DataSourceState,\n DataSourceStatus,\n RoomFileInfo,\n RoomFileState,\n} from './types';\n\nexport type RoomShellSliceConfig = BaseRoomConfig;\n\nexport type RoomShellStore = StoreApi<RoomShellSliceState>;\n\nexport type TaskProgress = {\n progress?: number | undefined;\n message: string;\n};\n\nexport type RoomShellSliceState = {\n initialize?: () => Promise<void>;\n room: BaseRoomStoreState['room'] & {\n config: RoomShellSliceConfig;\n tasksProgress: Record<string, TaskProgress>;\n\n setConfig: (config: RoomShellSliceConfig) => void;\n setTaskProgress: (\n id: string,\n taskProgress: TaskProgress | undefined,\n ) => void;\n getLoadingProgress: () => TaskProgress | undefined;\n\n roomFiles: RoomFileInfo[];\n roomFilesProgress: {[pathname: string]: RoomFileState};\n isDataAvailable: boolean; // Whether the data has been loaded (on initialization)\n dataSourceStates: {[tableName: string]: DataSourceState}; // TODO\n /**\n * Load a file data source. A fileDataSourceLoader implementation can be passed to\n * createRoomShellSlice to specify how file data sources should be loaded.\n *\n * @example\n * ```ts\n * ...createRoomShellSlice({\n * config: {\n * dataSources: [\n * { type: 'file', fileName: 'earthquakes.parquet', tableName: 'earthquakes' },\n * ],\n * },\n * room: {\n * fileDataSourceLoader: async ({fileName}, onProgress) =>\n * await downloadFile(`https://some.url/${fileName}`, {onProgress}),\n * },\n * })(set, get, store)\n * ```\n *\n * @param fileName - The name of the file to load.\n * @param onProgress - A callback to report the progress of the download.\n * @returns The loaded file.\n */\n fileDataSourceLoader?: (\n {fileName}: FileDataSource,\n onProgress: (progress: ProgressInfo) => void,\n ) => Promise<Uint8Array | File>;\n CustomErrorBoundary: React.ComponentType<{\n onRetry?: () => void;\n children?: ReactNode;\n }>;\n\n setRoomTitle(title: string): void;\n setDescription(description: string): void;\n\n /**\n * Add or update a SQL query data source.\n * @param tableName - The name of the table to create or update.\n * @param query - The SQL query to execute.\n * @param oldTableName - The name of the table to replace (optional).\n */\n addOrUpdateSqlQueryDataSource(\n tableName: string,\n query: string,\n oldTableName?: string,\n abortSignal?: AbortSignal,\n ): Promise<void>;\n areDatasetsReady(): boolean;\n\n addRoomFile(\n file: File | string,\n tableName?: string,\n loadFileOptions?: LoadFileOptions,\n ): Promise<DataTable | undefined>;\n /**\n * @deprecated Use removeDataSource or removeRoomFile instead\n */\n removeSqlQueryDataSource(tableName: string): Promise<void>;\n /**\n * Removes a data source from the room by tableName.\n * @param tableName - The name of the table of the data source to remove.\n */\n removeDataSource(tableName: string): Promise<void>;\n /**\n * Removes a file data source from the room by pathname.\n * @param pathname - The pathname of the file to remove.\n */\n removeRoomFile(pathname: string): Promise<void>;\n setRoomFiles(info: RoomFileInfo[]): void;\n setRoomFileProgress(pathname: string, fileState: RoomFileState): void;\n addDataSource: (\n dataSource: DataSource,\n status?: DataSourceStatus,\n ) => Promise<void>;\n };\n} & DuckDbSliceState &\n LayoutSliceState &\n CommandSliceState;\n\n/**\n * \tThis type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.\n */\ntype CreateRoomShellSliceProps = CreateBaseRoomSliceProps & {\n connector?: DuckDbConnector;\n config?: Partial<\n RoomShellSliceConfig & {\n /** @deprecated Use layout.config instead */\n layout?: LayoutConfig;\n }\n >;\n layout?: CreateLayoutSliceProps;\n fileDataSourceLoader?: RoomShellSliceState['room']['fileDataSourceLoader'];\n CustomErrorBoundary?: RoomShellSliceState['room']['CustomErrorBoundary'];\n /** @deprecated Use direct props instead e.g. layout.panels */\n room?: Partial<Pick<LayoutSliceState['layout'], 'panels'>>;\n};\n\nconst DOWNLOAD_DATA_SOURCES_TASK = 'download-data-sources';\nconst INIT_DB_TASK = 'init-db';\nconst INIT_ROOM_TASK = 'init-room';\nconst ROOM_SHELL_COMMAND_OWNER = '@sqlrooms/room-shell';\n\nconst RoomSetTitleCommandInput = z.object({\n title: z.string().min(1).describe('Room title.'),\n});\ntype RoomSetTitleCommandInput = z.infer<typeof RoomSetTitleCommandInput>;\n\nconst RoomSetDescriptionCommandInput = z.object({\n description: z.string().describe('Room description.'),\n});\ntype RoomSetDescriptionCommandInput = z.infer<\n typeof RoomSetDescriptionCommandInput\n>;\n\nconst RoomRemoveDataSourceInput = z.object({\n tableName: z.string().describe('Table name of the data source to remove.'),\n});\ntype RoomRemoveDataSourceInput = z.infer<typeof RoomRemoveDataSourceInput>;\n\nconst RoomAddUrlDataSourceInput = z.object({\n url: z.string().url().describe('URL of the source file to load.'),\n tableName: z\n .string()\n .describe('Target table name where the URL data should be loaded.'),\n httpMethod: z\n .string()\n .optional()\n .describe('Optional HTTP method for URL fetch.'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Optional HTTP headers for URL fetch.'),\n});\ntype RoomAddUrlDataSourceInput = z.infer<typeof RoomAddUrlDataSourceInput>;\n\nconst RoomAddSqlDataSourceInput = z.object({\n query: z.string().describe('SQL query that defines the derived table.'),\n tableName: z.string().describe('Target table name for query result.'),\n});\ntype RoomAddSqlDataSourceInput = z.infer<typeof RoomAddSqlDataSourceInput>;\n\nexport function createRoomShellSlice(\n props: CreateRoomShellSliceProps,\n): StateCreator<RoomShellSliceState> {\n const slice: StateCreator<RoomShellSliceState> = (set, get, store) => {\n const {\n connector,\n config: configProps,\n layout: layoutProps,\n room: deprecatedRoomProps,\n fileDataSourceLoader,\n CustomErrorBoundary = ErrorBoundary,\n captureException = (exception) => console.error(exception),\n ...restProps\n } = props;\n\n const createLayoutProps: CreateLayoutSliceProps = {\n ...layoutProps,\n config: layoutProps?.config ?? configProps?.layout,\n panels: layoutProps?.panels ?? deprecatedRoomProps?.panels,\n };\n const roomSliceState = createBaseRoomSlice({\n captureException,\n })(set, get, store);\n\n const sliceState: RoomShellSliceState = {\n ...roomSliceState,\n ...createDuckDbSlice({connector})(set, get, store),\n ...createLayoutSlice(createLayoutProps)(set, get, store),\n ...createCommandSlice()(set, get, store),\n room: {\n ...roomSliceState.room,\n config: {\n ...createDefaultBaseRoomConfig(),\n ...configProps,\n },\n CustomErrorBoundary,\n roomFiles: [],\n roomFilesProgress: {},\n isDataAvailable: false,\n dataSourceStates: {},\n tasksProgress: {},\n fileDataSourceLoader,\n\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config = config;\n }),\n );\n },\n\n async initialize() {\n registerCommandsForOwner(\n store,\n ROOM_SHELL_COMMAND_OWNER,\n createRoomShellCommands(),\n );\n const {setTaskProgress} = get().room;\n setTaskProgress(INIT_DB_TASK, {\n message: 'Initializing database…',\n progress: undefined,\n });\n await get().db.initialize();\n setTaskProgress(INIT_DB_TASK, undefined);\n\n setTaskProgress(INIT_ROOM_TASK, {\n message: 'Loading data sources…',\n progress: undefined,\n });\n await updateReadyDataSources();\n await maybeDownloadDataSources();\n\n // Call initialize on all other slices that have an initialize function\n const slices = Object.entries(store.getState()).filter(\n ([key, value]) =>\n key !== 'room' &&\n key !== 'db' &&\n isRoomSliceWithInitialize(value),\n );\n for (const [_, slice] of slices) {\n if (isRoomSliceWithInitialize(slice)) {\n await slice.initialize();\n }\n }\n const state = store.getState();\n if (isRoomSliceWithInitialize(state)) {\n await state.initialize();\n }\n\n setTaskProgress(INIT_ROOM_TASK, undefined);\n },\n\n async destroy() {\n unregisterCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER);\n await roomSliceState.room.destroy();\n },\n\n /** Returns the progress of the last task */\n getLoadingProgress() {\n const {tasksProgress} = get().room;\n const keys = Object.keys(tasksProgress);\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n return tasksProgress[lastKey];\n }\n return undefined;\n },\n\n setTaskProgress(id, taskProgress) {\n set((state) =>\n produce(state, (draft) => {\n if (taskProgress) {\n draft.room.tasksProgress[id] = taskProgress;\n } else {\n delete draft.room.tasksProgress[id];\n }\n }),\n );\n },\n\n setRoomTitle: (title) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.title = title;\n }),\n ),\n\n setDescription: (description) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.description = description;\n }),\n ),\n\n addDataSource: async (\n dataSource,\n status = DataSourceStatus.PENDING,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const dataSources = draft.room.config.dataSources;\n const tableName = dataSource.tableName;\n const index = dataSources.findIndex(\n (d) => d.tableName === tableName,\n );\n if (index >= 0) {\n dataSources[index] = dataSource;\n } else {\n dataSources.push(dataSource);\n }\n draft.room.dataSourceStates[tableName] = {status};\n }),\n );\n await maybeDownloadDataSources();\n },\n\n async addOrUpdateSqlQueryDataSource(\n tableName,\n query,\n oldTableName,\n abortSignal,\n ) {\n const {schema} = get().db;\n const {db} = get();\n const newTableName =\n tableName !== oldTableName\n ? convertToUniqueColumnOrTableName(\n tableName,\n await db.getTables(schema),\n )\n : tableName;\n const {rowCount} = await db.createTableFromQuery(\n newTableName,\n query,\n {\n abortSignal,\n },\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(newTableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n const newDataSource = {\n type: DataSourceTypes.enum.sql,\n sqlQuery: query,\n tableName: newTableName,\n };\n if (oldTableName) {\n draft.room.config.dataSources =\n draft.room.config.dataSources.map((dataSource) =>\n dataSource.tableName === oldTableName\n ? newDataSource\n : dataSource,\n );\n delete draft.room.dataSourceStates[oldTableName];\n } else {\n draft.room.config.dataSources.push(newDataSource);\n }\n draft.room.dataSourceStates[newTableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n await get().db.refreshTableSchemas();\n },\n\n setRoomFiles: (roomFiles) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles = roomFiles;\n }),\n ),\n\n async addRoomFile(file, desiredTableName, loadOptions) {\n const {db} = get();\n\n const pathname = file instanceof File ? file.name : file;\n const tableName =\n desiredTableName ?? convertToValidColumnOrTableName(pathname);\n\n await db.connector.loadFile(file, tableName, loadOptions);\n\n // This must come before addDataSource, as addDataSource can trigger\n // download which also adds the file\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles.push({\n pathname,\n duckdbFileName: pathname,\n size: file instanceof File ? file.size : undefined,\n file: file instanceof File ? file : undefined,\n });\n }),\n );\n await get().room.addDataSource(\n {\n type: DataSourceTypes.enum.file,\n fileName: pathname,\n tableName,\n },\n // duckdbFileName ? DataSourceStatus.READY : DataSourceStatus.PENDING,\n DataSourceStatus.READY,\n );\n await get().db.refreshTableSchemas();\n set((state) =>\n produce(state, (draft) => {\n if (\n Object.values(get().room.dataSourceStates).every(\n (ds) => ds.status === DataSourceStatus.READY,\n )\n ) {\n draft.room.isDataAvailable = true;\n }\n }),\n );\n return get().db.findTableByName(tableName);\n },\n removeSqlQueryDataSource: async (tableName) => {\n await get().room.removeDataSource(tableName);\n },\n removeDataSource: async (tableName) => {\n const {db} = get();\n const dataSource = get().room.config.dataSources.find(\n (d) => d.tableName === tableName,\n );\n if (dataSource) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.dataSources =\n draft.room.config.dataSources.filter(\n (d) => d.tableName !== tableName,\n );\n if (dataSource && isFileDataSource(dataSource)) {\n draft.room.roomFiles = draft.room.roomFiles.filter(\n (f) => f.pathname !== dataSource.fileName,\n );\n }\n delete draft.room.dataSourceStates[tableName];\n }),\n );\n await db.dropTable(tableName);\n await db.refreshTableSchemas();\n }\n },\n\n removeRoomFile: async (pathname) => {\n const dataSource = get().room.config.dataSources.find(\n (d) => isFileDataSource(d) && d.fileName === pathname,\n );\n if (dataSource) {\n await get().room.removeDataSource(dataSource.tableName);\n }\n },\n\n setRoomFileProgress(pathname, fileState) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFilesProgress[pathname] = fileState;\n // Update the file size in the room config from the progress info\n const fileInfo = draft.room.roomFiles.find(\n (f) => f.pathname === pathname,\n );\n if (fileInfo && fileInfo.size === undefined) {\n if (fileState.status !== 'error' && fileState.progress) {\n fileInfo.size = fileState.progress.total;\n }\n }\n }),\n );\n },\n\n areDatasetsReady: () => {\n const dataSourceStates = get().room.dataSourceStates;\n const dataSources = get().room.config.dataSources;\n return dataSources.every(\n (ds) =>\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.READY,\n );\n },\n },\n\n ...restProps,\n };\n\n // If the tables have changed, update the data sources\n store.subscribe((state, prevState) => {\n if (state.db.tables !== prevState.db.tables) {\n updateReadyDataSources();\n }\n });\n\n return sliceState;\n\n async function updateReadyDataSources() {\n const {tables} = get().db;\n const {dataSourceStates} = get().room;\n const {config} = get().room;\n const {dataSources} = config;\n set((state) =>\n produce(state, (draft) => {\n for (const ds of dataSources) {\n const tableName = ds.tableName;\n const table = tables.find((t) => t.tableName === tableName);\n if (table) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n } else {\n // Prev status could be ERROR or PENDING, don't change it then\n if (!dataSourceStates[tableName]?.status) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.PENDING,\n };\n }\n }\n }\n }),\n );\n }\n\n async function maybeDownloadDataSources() {\n const {roomFilesProgress, dataSourceStates} = get().room;\n const {dataSources} = get().room.config;\n const pendingDataSources = dataSources.filter(\n (ds) =>\n !dataSourceStates[ds.tableName] ||\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.PENDING,\n );\n\n const filesToDownload = pendingDataSources.filter((ds) => {\n if (isFileDataSource(ds)) {\n return !roomFilesProgress[ds.fileName];\n }\n if (isUrlDataSource(ds)) {\n return !roomFilesProgress[ds.url];\n }\n return false;\n }) as (FileDataSource | UrlDataSource)[];\n\n if (filesToDownload.length > 0) {\n await downloadRoomFiles(filesToDownload);\n }\n\n const queriesToRun = pendingDataSources.filter(isSqlQueryDataSource);\n\n if (queriesToRun.length > 0) {\n await runDataSourceQueries(queriesToRun);\n }\n\n if (get().room.config.dataSources.length > 0) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.isDataAvailable = true;\n }),\n );\n }\n }\n\n async function downloadRoomFiles(\n filesToDownload: (FileDataSource | UrlDataSource)[],\n ) {\n if (!filesToDownload.length) return;\n const {setTableRowCount} = get().db;\n const {captureException, setTaskProgress, setRoomFileProgress} =\n get().room;\n filesToDownload.forEach((ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n set((state) =>\n produce(state, (draft) => {\n const info = {\n duckdbFileName: fileName,\n pathname: fileName,\n file: undefined,\n size: undefined,\n };\n const index = draft.room.roomFiles.findIndex(\n (f) => f.pathname === fileName,\n );\n if (index >= 0) {\n draft.room.roomFiles[index] = info;\n } else {\n draft.room.roomFiles.push(info);\n }\n }),\n );\n setRoomFileProgress(fileName, {status: 'download'});\n });\n if (filesToDownload.length > 0) {\n updateTotalFileDownloadProgress();\n }\n\n const loadedFiles = await Promise.all(\n filesToDownload.map(async (ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n const onProgress = (progress: ProgressInfo) => {\n setRoomFileProgress(fileName, {\n status: 'download',\n progress,\n });\n updateTotalFileDownloadProgress();\n };\n try {\n let downloadedFile: Uint8Array | File;\n if (isFileDataSource(ds)) {\n const {fileDataSourceLoader} = get().room;\n if (!fileDataSourceLoader) {\n throw new Error('fileDataSourceLoader is not defined');\n }\n downloadedFile = await fileDataSourceLoader(ds, onProgress);\n } else if (isUrlDataSource(ds)) {\n const url = ds.url;\n downloadedFile = await downloadFile(url, {\n method: ds.httpMethod,\n headers: ds.headers,\n onProgress,\n });\n } else {\n // This should never happen as filesToDownload only contains FileDataSource | UrlDataSource\n throw new Error('Unsupported data source type');\n }\n setRoomFileProgress(fileName, {status: 'done'});\n updateTotalFileDownloadProgress();\n const {db} = get();\n await db.connector.loadFile(\n downloadedFile instanceof File\n ? downloadedFile\n : new File([new Uint8Array(downloadedFile)], fileName),\n ds.tableName,\n ds.loadOptions,\n );\n setTableRowCount(\n ds.tableName,\n await db.getTableRowCount(ds.tableName),\n );\n } catch (err) {\n captureException(err);\n console.error(err);\n setRoomFileProgress(fileName, {\n status: 'error',\n message: 'Download failed',\n });\n // TODO: Make sure the errors are shown\n } finally {\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, undefined);\n }\n }),\n );\n if (loadedFiles.length) {\n await get().db.refreshTableSchemas();\n }\n }\n\n async function runDataSourceQueries(queries: SqlQueryDataSource[]) {\n for (const ds of queries) {\n try {\n const {tableName, sqlQuery} = ds;\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.FETCHING,\n };\n }),\n );\n const {rowCount} = await get().db.createTableFromQuery(\n tableName,\n sqlQuery,\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(tableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n } catch (err) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[ds.tableName] = {\n status: DataSourceStatus.ERROR,\n message: `${err}`,\n };\n }),\n );\n // TODO: Make sure the errors are shown\n }\n }\n await get().db.refreshTableSchemas();\n await updateReadyDataSources();\n }\n\n function updateTotalFileDownloadProgress() {\n const {setTaskProgress, roomFilesProgress} = get().room;\n let total = 0,\n loaded = 0;\n for (const p of Object.values(roomFilesProgress)) {\n if (p.status === 'download' || p.status === 'done') {\n total += p.progress?.total || 0;\n loaded += p.progress?.loaded || 0;\n }\n }\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, {\n progress: total > 0 ? Math.round((loaded / total) * 100) : undefined,\n message: 'Downloading data…',\n });\n }\n };\n\n return slice;\n}\n\ntype RoomShellCommandStoreState = RoomShellSliceState;\n\nfunction createRoomShellCommands(): RoomCommand<RoomShellCommandStoreState>[] {\n return [\n {\n id: 'room.set-title',\n name: 'Set room title',\n description: 'Update the room title',\n group: 'Room',\n keywords: ['room', 'title', 'name'],\n inputSchema: RoomSetTitleCommandInput,\n inputDescription: 'Provide a non-empty room title.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {title} = input as RoomSetTitleCommandInput;\n getState().room.setRoomTitle(title);\n return {\n success: true,\n commandId: 'room.set-title',\n message: `Updated room title to \"${title}\".`,\n };\n },\n },\n {\n id: 'room.set-description',\n name: 'Set room description',\n description: 'Update the room description',\n group: 'Room',\n keywords: ['room', 'description'],\n inputSchema: RoomSetDescriptionCommandInput,\n inputDescription: 'Provide room description text.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {description} = input as RoomSetDescriptionCommandInput;\n getState().room.setDescription(description);\n return {\n success: true,\n commandId: 'room.set-description',\n message: 'Updated room description.',\n };\n },\n },\n {\n id: 'room.remove-data-source',\n name: 'Remove data source',\n description: 'Remove a data source by table name',\n group: 'Room',\n keywords: ['room', 'data source', 'remove', 'table'],\n inputSchema: RoomRemoveDataSourceInput,\n inputDescription: 'Provide tableName of the data source to remove.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'high',\n requiresConfirmation: true,\n },\n validateInput: (input, {getState}) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n const dataSource = getState().room.config.dataSources.find(\n (source) => source.tableName === tableName,\n );\n if (!dataSource) {\n throw new Error(\n `Data source for table \"${tableName}\" was not found.`,\n );\n }\n },\n execute: async ({getState}, input) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n await getState().room.removeDataSource(tableName);\n return {\n success: true,\n commandId: 'room.remove-data-source',\n message: `Removed data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-url-data-source',\n name: 'Add URL data source',\n description: 'Add a URL data source and start loading it',\n group: 'Room',\n keywords: ['room', 'data source', 'url', 'add'],\n inputSchema: RoomAddUrlDataSourceInput,\n inputDescription:\n 'Provide url and tableName, with optional httpMethod and headers.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n execute: async ({getState}, input) => {\n const {url, tableName, httpMethod, headers} =\n input as RoomAddUrlDataSourceInput;\n await getState().room.addDataSource({\n type: DataSourceTypes.enum.url,\n url,\n tableName,\n ...(httpMethod ? {httpMethod} : {}),\n ...(headers ? {headers} : {}),\n });\n return {\n success: true,\n commandId: 'room.add-url-data-source',\n message: `Added URL data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-sql-data-source',\n name: 'Add SQL data source',\n description: 'Create a data source from a SQL query',\n group: 'Room',\n keywords: ['room', 'data source', 'sql', 'query', 'add'],\n inputSchema: RoomAddSqlDataSourceInput,\n inputDescription: 'Provide query and tableName.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n validateInput: (input) => {\n const {query} = input as RoomAddSqlDataSourceInput;\n if (!query.trim()) {\n throw new Error('Query cannot be empty.');\n }\n },\n execute: async ({getState}, input) => {\n const {query, tableName} = input as RoomAddSqlDataSourceInput;\n await getState().room.addOrUpdateSqlQueryDataSource(tableName, query);\n return {\n success: true,\n commandId: 'room.add-sql-data-source',\n message: `Added SQL data source \"${tableName}\".`,\n };\n },\n },\n ];\n}\n\nexport function useBaseRoomShellStore<RS extends RoomShellSliceState, T>(\n selector: (state: RS) => T,\n): T {\n return useBaseRoomStore<RS, T>(selector as (state: RS) => T);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomShellSlice.js","sourceRoot":"","sources":["../src/RoomShellSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DataTable,\n DuckDbConnector,\n DuckDbSliceState,\n LoadFileOptions,\n createDuckDbSlice,\n} from '@sqlrooms/duckdb';\nimport {\n CreateLayoutSliceProps,\n LayoutSliceState,\n createLayoutSlice,\n} from '@sqlrooms/layout';\nimport {\n BaseRoomConfig,\n DataSource,\n DataSourceTypes,\n FileDataSource,\n LayoutConfig,\n SqlQueryDataSource,\n UrlDataSource,\n createDefaultBaseRoomConfig,\n isFileDataSource,\n isSqlQueryDataSource,\n isUrlDataSource,\n} from '@sqlrooms/room-config';\nimport {\n BaseRoomStoreState,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n createBaseRoomSlice,\n createCommandSlice,\n isRoomSliceWithInitialize,\n registerCommandsForOwner,\n RoomCommand,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {ErrorBoundary} from '@sqlrooms/ui';\nimport {\n ProgressInfo,\n convertToUniqueColumnOrTableName,\n convertToValidColumnOrTableName,\n downloadFile,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {ReactNode} from 'react';\nimport {z} from 'zod';\nimport {StateCreator, StoreApi} from 'zustand';\nimport {\n DataSourceState,\n DataSourceStatus,\n RoomFileInfo,\n RoomFileState,\n} from './types';\n\nexport type RoomShellSliceConfig = BaseRoomConfig;\n\nexport type RoomShellStore = StoreApi<RoomShellSliceState>;\n\nexport type TaskProgress = {\n progress?: number | undefined;\n message: string;\n};\n\nexport type RoomShellSliceState = {\n initialize?: () => Promise<void>;\n room: BaseRoomStoreState['room'] & {\n config: RoomShellSliceConfig;\n tasksProgress: Record<string, TaskProgress>;\n\n setConfig: (config: RoomShellSliceConfig) => void;\n setTaskProgress: (\n id: string,\n taskProgress: TaskProgress | undefined,\n ) => void;\n getLoadingProgress: () => TaskProgress | undefined;\n\n roomFiles: RoomFileInfo[];\n roomFilesProgress: {[pathname: string]: RoomFileState};\n isDataAvailable: boolean; // Whether the data has been loaded (on initialization)\n dataSourceStates: {[tableName: string]: DataSourceState}; // TODO\n /**\n * Load a file data source. A fileDataSourceLoader implementation can be passed to\n * createRoomShellSlice to specify how file data sources should be loaded.\n *\n * @example\n * ```ts\n * ...createRoomShellSlice({\n * config: {\n * dataSources: [\n * { type: 'file', fileName: 'earthquakes.parquet', tableName: 'earthquakes' },\n * ],\n * },\n * room: {\n * fileDataSourceLoader: async ({fileName}, onProgress) =>\n * await downloadFile(`https://some.url/${fileName}`, {onProgress}),\n * },\n * })(set, get, store)\n * ```\n *\n * @param fileName - The name of the file to load.\n * @param onProgress - A callback to report the progress of the download.\n * @returns The loaded file.\n */\n fileDataSourceLoader?: (\n {fileName}: FileDataSource,\n onProgress: (progress: ProgressInfo) => void,\n ) => Promise<Uint8Array | File>;\n CustomErrorBoundary: React.ComponentType<{\n onRetry?: () => void;\n children?: ReactNode;\n }>;\n\n setRoomTitle(title: string): void;\n setDescription(description: string): void;\n\n /**\n * Add or update a SQL query data source.\n * @param tableName - The name of the table to create or update.\n * @param query - The SQL query to execute.\n * @param oldTableName - The name of the table to replace (optional).\n */\n addOrUpdateSqlQueryDataSource(\n tableName: string,\n query: string,\n oldTableName?: string,\n abortSignal?: AbortSignal,\n ): Promise<void>;\n areDatasetsReady(): boolean;\n\n addRoomFile(\n file: File | string,\n tableName?: string,\n loadFileOptions?: LoadFileOptions,\n ): Promise<DataTable | undefined>;\n /**\n * @deprecated Use removeDataSource or removeRoomFile instead\n */\n removeSqlQueryDataSource(tableName: string): Promise<void>;\n /**\n * Removes a data source from the room by tableName.\n * @param tableName - The name of the table of the data source to remove.\n */\n removeDataSource(tableName: string): Promise<void>;\n /**\n * Removes a file data source from the room by pathname.\n * @param pathname - The pathname of the file to remove.\n */\n removeRoomFile(pathname: string): Promise<void>;\n setRoomFiles(info: RoomFileInfo[]): void;\n setRoomFileProgress(pathname: string, fileState: RoomFileState): void;\n addDataSource: (\n dataSource: DataSource,\n status?: DataSourceStatus,\n ) => Promise<void>;\n };\n} & DuckDbSliceState &\n LayoutSliceState &\n CommandSliceState;\n\n/**\n * \tThis type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.\n */\ntype CreateRoomShellSliceProps = CreateBaseRoomSliceProps & {\n connector?: DuckDbConnector;\n config?: Partial<\n RoomShellSliceConfig & {\n /** @deprecated Use layout.config instead */\n layout?: LayoutConfig;\n }\n >;\n layout?: CreateLayoutSliceProps;\n fileDataSourceLoader?: RoomShellSliceState['room']['fileDataSourceLoader'];\n CustomErrorBoundary?: RoomShellSliceState['room']['CustomErrorBoundary'];\n createCommandProps?: CreateCommandSliceProps;\n /** @deprecated Use direct props instead e.g. layout.panels */\n room?: Partial<Pick<LayoutSliceState['layout'], 'panels'>>;\n};\n\nconst DOWNLOAD_DATA_SOURCES_TASK = 'download-data-sources';\nconst INIT_DB_TASK = 'init-db';\nconst INIT_ROOM_TASK = 'init-room';\nconst ROOM_SHELL_COMMAND_OWNER = '@sqlrooms/room-shell';\n\nconst RoomSetTitleCommandInput = z.object({\n title: z.string().min(1).describe('Room title.'),\n});\ntype RoomSetTitleCommandInput = z.infer<typeof RoomSetTitleCommandInput>;\n\nconst RoomSetDescriptionCommandInput = z.object({\n description: z.string().describe('Room description.'),\n});\ntype RoomSetDescriptionCommandInput = z.infer<\n typeof RoomSetDescriptionCommandInput\n>;\n\nconst RoomRemoveDataSourceInput = z.object({\n tableName: z.string().describe('Table name of the data source to remove.'),\n});\ntype RoomRemoveDataSourceInput = z.infer<typeof RoomRemoveDataSourceInput>;\n\nconst RoomAddUrlDataSourceInput = z.object({\n url: z.string().url().describe('URL of the source file to load.'),\n tableName: z\n .string()\n .describe('Target table name where the URL data should be loaded.'),\n httpMethod: z\n .string()\n .optional()\n .describe('Optional HTTP method for URL fetch.'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Optional HTTP headers for URL fetch.'),\n});\ntype RoomAddUrlDataSourceInput = z.infer<typeof RoomAddUrlDataSourceInput>;\n\nconst RoomAddSqlDataSourceInput = z.object({\n query: z.string().describe('SQL query that defines the derived table.'),\n tableName: z.string().describe('Target table name for query result.'),\n});\ntype RoomAddSqlDataSourceInput = z.infer<typeof RoomAddSqlDataSourceInput>;\n\nexport function createRoomShellSlice(\n props: CreateRoomShellSliceProps,\n): StateCreator<RoomShellSliceState> {\n const slice: StateCreator<RoomShellSliceState> = (set, get, store) => {\n const {\n connector,\n config: configProps,\n layout: layoutProps,\n room: deprecatedRoomProps,\n fileDataSourceLoader,\n CustomErrorBoundary = ErrorBoundary,\n createCommandProps,\n captureException = (exception) => console.error(exception),\n ...restProps\n } = props;\n\n const createLayoutProps: CreateLayoutSliceProps = {\n ...layoutProps,\n config: layoutProps?.config ?? configProps?.layout,\n panels: layoutProps?.panels ?? deprecatedRoomProps?.panels,\n };\n const roomSliceState = createBaseRoomSlice({\n captureException,\n })(set, get, store);\n\n const sliceState: RoomShellSliceState = {\n ...roomSliceState,\n ...createDuckDbSlice({connector})(set, get, store),\n ...createLayoutSlice(createLayoutProps)(set, get, store),\n ...createCommandSlice(createCommandProps)(set, get, store),\n room: {\n ...roomSliceState.room,\n config: {\n ...createDefaultBaseRoomConfig(),\n ...configProps,\n },\n CustomErrorBoundary,\n roomFiles: [],\n roomFilesProgress: {},\n isDataAvailable: false,\n dataSourceStates: {},\n tasksProgress: {},\n fileDataSourceLoader,\n\n setConfig: (config) => {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config = config;\n }),\n );\n },\n\n async initialize() {\n registerCommandsForOwner(\n store,\n ROOM_SHELL_COMMAND_OWNER,\n createRoomShellCommands(),\n );\n const {setTaskProgress} = get().room;\n setTaskProgress(INIT_DB_TASK, {\n message: 'Initializing database…',\n progress: undefined,\n });\n await get().db.initialize();\n setTaskProgress(INIT_DB_TASK, undefined);\n\n setTaskProgress(INIT_ROOM_TASK, {\n message: 'Loading data sources…',\n progress: undefined,\n });\n await updateReadyDataSources();\n await maybeDownloadDataSources();\n\n // Call initialize on all other slices that have an initialize function\n const slices = Object.entries(store.getState()).filter(\n ([key, value]) =>\n key !== 'room' &&\n key !== 'db' &&\n isRoomSliceWithInitialize(value),\n );\n for (const [_, slice] of slices) {\n if (isRoomSliceWithInitialize(slice)) {\n await slice.initialize();\n }\n }\n const state = store.getState();\n if (isRoomSliceWithInitialize(state)) {\n await state.initialize();\n }\n\n setTaskProgress(INIT_ROOM_TASK, undefined);\n },\n\n async destroy() {\n unregisterCommandsForOwner(store, ROOM_SHELL_COMMAND_OWNER);\n await roomSliceState.room.destroy();\n },\n\n /** Returns the progress of the last task */\n getLoadingProgress() {\n const {tasksProgress} = get().room;\n const keys = Object.keys(tasksProgress);\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n return tasksProgress[lastKey];\n }\n return undefined;\n },\n\n setTaskProgress(id, taskProgress) {\n set((state) =>\n produce(state, (draft) => {\n if (taskProgress) {\n draft.room.tasksProgress[id] = taskProgress;\n } else {\n delete draft.room.tasksProgress[id];\n }\n }),\n );\n },\n\n setRoomTitle: (title) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.title = title;\n }),\n ),\n\n setDescription: (description) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.description = description;\n }),\n ),\n\n addDataSource: async (\n dataSource,\n status = DataSourceStatus.PENDING,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const dataSources = draft.room.config.dataSources;\n const tableName = dataSource.tableName;\n const index = dataSources.findIndex(\n (d) => d.tableName === tableName,\n );\n if (index >= 0) {\n dataSources[index] = dataSource;\n } else {\n dataSources.push(dataSource);\n }\n draft.room.dataSourceStates[tableName] = {status};\n }),\n );\n await maybeDownloadDataSources();\n },\n\n async addOrUpdateSqlQueryDataSource(\n tableName,\n query,\n oldTableName,\n abortSignal,\n ) {\n const {schema} = get().db;\n const {db} = get();\n const newTableName =\n tableName !== oldTableName\n ? convertToUniqueColumnOrTableName(\n tableName,\n await db.getTables(schema),\n )\n : tableName;\n const {rowCount} = await db.createTableFromQuery(\n newTableName,\n query,\n {\n abortSignal,\n },\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(newTableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n const newDataSource = {\n type: DataSourceTypes.enum.sql,\n sqlQuery: query,\n tableName: newTableName,\n };\n if (oldTableName) {\n draft.room.config.dataSources =\n draft.room.config.dataSources.map((dataSource) =>\n dataSource.tableName === oldTableName\n ? newDataSource\n : dataSource,\n );\n delete draft.room.dataSourceStates[oldTableName];\n } else {\n draft.room.config.dataSources.push(newDataSource);\n }\n draft.room.dataSourceStates[newTableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n await get().db.refreshTableSchemas();\n },\n\n setRoomFiles: (roomFiles) =>\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles = roomFiles;\n }),\n ),\n\n async addRoomFile(file, desiredTableName, loadOptions) {\n const {db} = get();\n\n const pathname = file instanceof File ? file.name : file;\n const tableName =\n desiredTableName ?? convertToValidColumnOrTableName(pathname);\n\n await db.connector.loadFile(file, tableName, loadOptions);\n\n // This must come before addDataSource, as addDataSource can trigger\n // download which also adds the file\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFiles.push({\n pathname,\n duckdbFileName: pathname,\n size: file instanceof File ? file.size : undefined,\n file: file instanceof File ? file : undefined,\n });\n }),\n );\n await get().room.addDataSource(\n {\n type: DataSourceTypes.enum.file,\n fileName: pathname,\n tableName,\n },\n // duckdbFileName ? DataSourceStatus.READY : DataSourceStatus.PENDING,\n DataSourceStatus.READY,\n );\n await get().db.refreshTableSchemas();\n set((state) =>\n produce(state, (draft) => {\n if (\n Object.values(get().room.dataSourceStates).every(\n (ds) => ds.status === DataSourceStatus.READY,\n )\n ) {\n draft.room.isDataAvailable = true;\n }\n }),\n );\n return get().db.findTableByName(tableName);\n },\n removeSqlQueryDataSource: async (tableName) => {\n await get().room.removeDataSource(tableName);\n },\n removeDataSource: async (tableName) => {\n const {db} = get();\n const dataSource = get().room.config.dataSources.find(\n (d) => d.tableName === tableName,\n );\n if (dataSource) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.config.dataSources =\n draft.room.config.dataSources.filter(\n (d) => d.tableName !== tableName,\n );\n if (dataSource && isFileDataSource(dataSource)) {\n draft.room.roomFiles = draft.room.roomFiles.filter(\n (f) => f.pathname !== dataSource.fileName,\n );\n }\n delete draft.room.dataSourceStates[tableName];\n }),\n );\n await db.dropTable(tableName);\n await db.refreshTableSchemas();\n }\n },\n\n removeRoomFile: async (pathname) => {\n const dataSource = get().room.config.dataSources.find(\n (d) => isFileDataSource(d) && d.fileName === pathname,\n );\n if (dataSource) {\n await get().room.removeDataSource(dataSource.tableName);\n }\n },\n\n setRoomFileProgress(pathname, fileState) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.roomFilesProgress[pathname] = fileState;\n // Update the file size in the room config from the progress info\n const fileInfo = draft.room.roomFiles.find(\n (f) => f.pathname === pathname,\n );\n if (fileInfo && fileInfo.size === undefined) {\n if (fileState.status !== 'error' && fileState.progress) {\n fileInfo.size = fileState.progress.total;\n }\n }\n }),\n );\n },\n\n areDatasetsReady: () => {\n const dataSourceStates = get().room.dataSourceStates;\n const dataSources = get().room.config.dataSources;\n return dataSources.every(\n (ds) =>\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.READY,\n );\n },\n },\n\n ...restProps,\n };\n\n // If the tables have changed, update the data sources\n store.subscribe((state, prevState) => {\n if (state.db.tables !== prevState.db.tables) {\n updateReadyDataSources();\n }\n });\n\n return sliceState;\n\n async function updateReadyDataSources() {\n const {tables} = get().db;\n const {dataSourceStates} = get().room;\n const {config} = get().room;\n const {dataSources} = config;\n set((state) =>\n produce(state, (draft) => {\n for (const ds of dataSources) {\n const tableName = ds.tableName;\n const table = tables.find((t) => t.tableName === tableName);\n if (table) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n } else {\n // Prev status could be ERROR or PENDING, don't change it then\n if (!dataSourceStates[tableName]?.status) {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.PENDING,\n };\n }\n }\n }\n }),\n );\n }\n\n async function maybeDownloadDataSources() {\n const {roomFilesProgress, dataSourceStates} = get().room;\n const {dataSources} = get().room.config;\n const pendingDataSources = dataSources.filter(\n (ds) =>\n !dataSourceStates[ds.tableName] ||\n dataSourceStates[ds.tableName]?.status === DataSourceStatus.PENDING,\n );\n\n const filesToDownload = pendingDataSources.filter((ds) => {\n if (isFileDataSource(ds)) {\n return !roomFilesProgress[ds.fileName];\n }\n if (isUrlDataSource(ds)) {\n return !roomFilesProgress[ds.url];\n }\n return false;\n }) as (FileDataSource | UrlDataSource)[];\n\n if (filesToDownload.length > 0) {\n await downloadRoomFiles(filesToDownload);\n }\n\n const queriesToRun = pendingDataSources.filter(isSqlQueryDataSource);\n\n if (queriesToRun.length > 0) {\n await runDataSourceQueries(queriesToRun);\n }\n\n if (get().room.config.dataSources.length > 0) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.isDataAvailable = true;\n }),\n );\n }\n }\n\n async function downloadRoomFiles(\n filesToDownload: (FileDataSource | UrlDataSource)[],\n ) {\n if (!filesToDownload.length) return;\n const {setTableRowCount} = get().db;\n const {captureException, setTaskProgress, setRoomFileProgress} =\n get().room;\n filesToDownload.forEach((ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n set((state) =>\n produce(state, (draft) => {\n const info = {\n duckdbFileName: fileName,\n pathname: fileName,\n file: undefined,\n size: undefined,\n };\n const index = draft.room.roomFiles.findIndex(\n (f) => f.pathname === fileName,\n );\n if (index >= 0) {\n draft.room.roomFiles[index] = info;\n } else {\n draft.room.roomFiles.push(info);\n }\n }),\n );\n setRoomFileProgress(fileName, {status: 'download'});\n });\n if (filesToDownload.length > 0) {\n updateTotalFileDownloadProgress();\n }\n\n const loadedFiles = await Promise.all(\n filesToDownload.map(async (ds) => {\n const fileName = isFileDataSource(ds) ? ds.fileName : ds.url;\n const onProgress = (progress: ProgressInfo) => {\n setRoomFileProgress(fileName, {\n status: 'download',\n progress,\n });\n updateTotalFileDownloadProgress();\n };\n try {\n let downloadedFile: Uint8Array | File;\n if (isFileDataSource(ds)) {\n const {fileDataSourceLoader} = get().room;\n if (!fileDataSourceLoader) {\n throw new Error('fileDataSourceLoader is not defined');\n }\n downloadedFile = await fileDataSourceLoader(ds, onProgress);\n } else if (isUrlDataSource(ds)) {\n const url = ds.url;\n downloadedFile = await downloadFile(url, {\n method: ds.httpMethod,\n headers: ds.headers,\n onProgress,\n });\n } else {\n // This should never happen as filesToDownload only contains FileDataSource | UrlDataSource\n throw new Error('Unsupported data source type');\n }\n setRoomFileProgress(fileName, {status: 'done'});\n updateTotalFileDownloadProgress();\n const {db} = get();\n await db.connector.loadFile(\n downloadedFile instanceof File\n ? downloadedFile\n : new File([new Uint8Array(downloadedFile)], fileName),\n ds.tableName,\n ds.loadOptions,\n );\n setTableRowCount(\n ds.tableName,\n await db.getTableRowCount(ds.tableName),\n );\n } catch (err) {\n captureException(err);\n console.error(err);\n setRoomFileProgress(fileName, {\n status: 'error',\n message: 'Download failed',\n });\n // TODO: Make sure the errors are shown\n } finally {\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, undefined);\n }\n }),\n );\n if (loadedFiles.length) {\n await get().db.refreshTableSchemas();\n }\n }\n\n async function runDataSourceQueries(queries: SqlQueryDataSource[]) {\n for (const ds of queries) {\n try {\n const {tableName, sqlQuery} = ds;\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.FETCHING,\n };\n }),\n );\n const {rowCount} = await get().db.createTableFromQuery(\n tableName,\n sqlQuery,\n );\n if (rowCount !== undefined) {\n get().db.setTableRowCount(tableName, rowCount);\n }\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[tableName] = {\n status: DataSourceStatus.READY,\n };\n }),\n );\n } catch (err) {\n set((state) =>\n produce(state, (draft) => {\n draft.room.dataSourceStates[ds.tableName] = {\n status: DataSourceStatus.ERROR,\n message: `${err}`,\n };\n }),\n );\n // TODO: Make sure the errors are shown\n }\n }\n await get().db.refreshTableSchemas();\n await updateReadyDataSources();\n }\n\n function updateTotalFileDownloadProgress() {\n const {setTaskProgress, roomFilesProgress} = get().room;\n let total = 0,\n loaded = 0;\n for (const p of Object.values(roomFilesProgress)) {\n if (p.status === 'download' || p.status === 'done') {\n total += p.progress?.total || 0;\n loaded += p.progress?.loaded || 0;\n }\n }\n setTaskProgress(DOWNLOAD_DATA_SOURCES_TASK, {\n progress: total > 0 ? Math.round((loaded / total) * 100) : undefined,\n message: 'Downloading data…',\n });\n }\n };\n\n return slice;\n}\n\ntype RoomShellCommandStoreState = RoomShellSliceState;\n\nfunction createRoomShellCommands(): RoomCommand<RoomShellCommandStoreState>[] {\n return [\n {\n id: 'room.set-title',\n name: 'Set room title',\n description: 'Update the room title',\n group: 'Room',\n keywords: ['room', 'title', 'name'],\n inputSchema: RoomSetTitleCommandInput,\n inputDescription: 'Provide a non-empty room title.',\n ui: {\n keystrokes: 'Mod+Alt+Shift+T',\n },\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {title} = input as RoomSetTitleCommandInput;\n getState().room.setRoomTitle(title);\n return {\n success: true,\n commandId: 'room.set-title',\n message: `Updated room title to \"${title}\".`,\n };\n },\n },\n {\n id: 'room.set-description',\n name: 'Set room description',\n description: 'Update the room description',\n group: 'Room',\n keywords: ['room', 'description'],\n inputSchema: RoomSetDescriptionCommandInput,\n inputDescription: 'Provide room description text.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'low',\n },\n execute: ({getState}, input) => {\n const {description} = input as RoomSetDescriptionCommandInput;\n getState().room.setDescription(description);\n return {\n success: true,\n commandId: 'room.set-description',\n message: 'Updated room description.',\n };\n },\n },\n {\n id: 'room.remove-data-source',\n name: 'Remove data source',\n description: 'Remove a data source by table name',\n group: 'Room',\n keywords: ['room', 'data source', 'remove', 'table'],\n inputSchema: RoomRemoveDataSourceInput,\n inputDescription: 'Provide tableName of the data source to remove.',\n metadata: {\n readOnly: false,\n idempotent: true,\n riskLevel: 'high',\n requiresConfirmation: true,\n },\n validateInput: (input, {getState}) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n const dataSource = getState().room.config.dataSources.find(\n (source) => source.tableName === tableName,\n );\n if (!dataSource) {\n throw new Error(\n `Data source for table \"${tableName}\" was not found.`,\n );\n }\n },\n execute: async ({getState}, input) => {\n const {tableName} = input as RoomRemoveDataSourceInput;\n await getState().room.removeDataSource(tableName);\n return {\n success: true,\n commandId: 'room.remove-data-source',\n message: `Removed data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-url-data-source',\n name: 'Add URL data source',\n description: 'Add a URL data source and start loading it',\n group: 'Room',\n keywords: ['room', 'data source', 'url', 'add'],\n inputSchema: RoomAddUrlDataSourceInput,\n inputDescription:\n 'Provide url and tableName, with optional httpMethod and headers.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n execute: async ({getState}, input) => {\n const {url, tableName, httpMethod, headers} =\n input as RoomAddUrlDataSourceInput;\n await getState().room.addDataSource({\n type: DataSourceTypes.enum.url,\n url,\n tableName,\n ...(httpMethod ? {httpMethod} : {}),\n ...(headers ? {headers} : {}),\n });\n return {\n success: true,\n commandId: 'room.add-url-data-source',\n message: `Added URL data source \"${tableName}\".`,\n };\n },\n },\n {\n id: 'room.add-sql-data-source',\n name: 'Add SQL data source',\n description: 'Create a data source from a SQL query',\n group: 'Room',\n keywords: ['room', 'data source', 'sql', 'query', 'add'],\n inputSchema: RoomAddSqlDataSourceInput,\n inputDescription: 'Provide query and tableName.',\n metadata: {\n readOnly: false,\n idempotent: false,\n riskLevel: 'medium',\n },\n validateInput: (input) => {\n const {query} = input as RoomAddSqlDataSourceInput;\n if (!query.trim()) {\n throw new Error('Query cannot be empty.');\n }\n },\n execute: async ({getState}, input) => {\n const {query, tableName} = input as RoomAddSqlDataSourceInput;\n await getState().room.addOrUpdateSqlQueryDataSource(tableName, query);\n return {\n success: true,\n commandId: 'room.add-sql-data-source',\n message: `Added SQL data source \"${tableName}\".`,\n };\n },\n },\n ];\n}\n\nexport function useBaseRoomShellStore<RS extends RoomShellSliceState, T>(\n selector: (state: RS) => T,\n): T {\n return useBaseRoomStore<RS, T>(selector as (state: RS) => T);\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,8 +20,8 @@ export type { StateCreator, StoreApi } from 'zustand';
|
|
|
20
20
|
export { DataSourceStatus } from './types';
|
|
21
21
|
export type { DataSourceState, RoomFileInfo, RoomFileState } from './types';
|
|
22
22
|
export type { RoomPanelInfo } from '@sqlrooms/layout';
|
|
23
|
-
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
24
|
-
export type { BaseRoomStore, BaseRoomStoreState, CommandCliAdapter, CommandCliAdapterOptions, CommandMcpAdapter, CommandMcpAdapterOptions, CommandMcpToolDescriptor, CommandSliceState, CreateBaseRoomSliceProps, RoomCommandDescriptor, RoomCommandExecuteOutput, RoomCommandInvocation, RoomCommandInvocationOptions, RegisteredRoomCommand, RoomCommand, RoomCommandInputComponent, RoomCommandInputComponentProps, RoomCommandListOptions, RoomCommandPolicyMetadata, RoomCommandPortableSchema, RoomCommandResult, RoomCommandRiskLevel, RoomCommandSurface, RoomCommandUiMetadata, RoomCommandExecutionContext, RoomCommandPredicate, RoomStateProviderProps, UseRoomStore, } from '@sqlrooms/room-store';
|
|
23
|
+
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandKeystrokes, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
24
|
+
export type { BaseRoomStore, BaseRoomStoreState, CommandCliAdapter, CommandCliAdapterOptions, CommandMcpAdapter, CommandMcpAdapterOptions, CommandMcpToolDescriptor, CommandSliceState, CreateCommandSliceProps, CreateBaseRoomSliceProps, RoomCommandDescriptor, RoomCommandExecuteOutput, RoomCommandKeystrokes, RoomCommandInvocation, RoomCommandInvokeFailureEvent, RoomCommandInvokeErrorEvent, RoomCommandInvocationOptions, RoomCommandInvokeStartEvent, RoomCommandInvokeSuccessEvent, RoomCommandMiddleware, RoomCommandMiddlewareNext, RegisteredRoomCommand, RoomCommand, RoomCommandInputComponent, RoomCommandInputComponentProps, RoomCommandListOptions, RoomCommandPolicyMetadata, RoomCommandPortableSchema, RoomCommandResult, RoomCommandRiskLevel, RoomCommandSurface, RoomCommandUiMetadata, RoomCommandExecutionContext, RoomCommandPredicate, RoomStateProviderProps, UseRoomStore, } from '@sqlrooms/room-store';
|
|
25
25
|
export { useShallow } from 'zustand/react/shallow';
|
|
26
26
|
export { BaseDataSource, BaseRoomConfig, createDefaultBaseRoomConfig, createDefaultMosaicLayout, DataSource, DataSourceTypes, DEFAULT_MOSAIC_LAYOUT, DEFAULT_ROOM_TITLE, FileDataSource, isFileDataSource, isMosaicLayoutParent, isSpatialLoadFileOptions, isSqlQueryDataSource, isUrlDataSource, LayoutConfig, LayoutTypes, LoadFile, LoadFileOptions, MAIN_VIEW, MosaicLayoutConfig, MosaicLayoutDirection, MosaicLayoutNode, MosaicLayoutNodeKey, MosaicLayoutParent, SpatialLoadFileOptions, SpatialLoadOptions, SqlQueryDataSource, StandardLoadFileOptions, StandardLoadOptions, UrlDataSource, } from '@sqlrooms/room-store';
|
|
27
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export { RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton, } from
|
|
|
15
15
|
export { createRoomShellSlice, useBaseRoomShellStore } from './RoomShellSlice';
|
|
16
16
|
export { DataSourceStatus } from './types';
|
|
17
17
|
// Re-export from @sqlrooms/room-store
|
|
18
|
-
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
18
|
+
export { createBaseRoomSlice, createBaseSlice, createCommandSlice, createCommandCliAdapter, createCommandMcpAdapter, createPersistHelpers, createRoomCommandExecutionContext, createRoomSlice, createRoomStore, createRoomStoreCreator, createSlice, doesCommandRequireInput, exportCommandInputSchema, getCommandKeystrokes, getCommandInputComponent, getCommandShortcut, hasCommandSliceState, invokeCommandFromStore, isRoomSliceWithDestroy, isRoomSliceWithInitialize, listCommandsFromStore, persistSliceConfigs, registerCommandsForOwner, resolveCommandPolicyMetadata, RoomStateContext, RoomStateProvider, unregisterCommandsForOwner, useBaseRoomStore, validateCommandInput, useRoomStoreApi, } from '@sqlrooms/room-store';
|
|
19
19
|
export { useShallow } from 'zustand/react/shallow';
|
|
20
20
|
// Re-export from @sqlrooms/room-config (via room-store)
|
|
21
21
|
// Values also export their corresponding types automatically (Zod pattern)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAK7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAKzC,sCAAsC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAK7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAKzC,sCAAsC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAwC9B,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAEjD,wDAAwD;AACxD,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GACd,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {RoomShell} from './RoomShell';\nexport {RoomShellCommandPalette} from './RoomShellCommandPalette';\nexport type {\n RoomShellCommandPaletteButtonProps,\n RoomShellCommandPaletteProps,\n} from './RoomShellCommandPalette';\n\nexport {FileDataSourceCard} from './data-sources/FileDataSourceCard';\nexport {FileDataSourcesPanel} from './data-sources/FileDataSourcesPanel';\nexport {TableCard} from './data-sources/TableCard';\nexport type {TableAction} from './data-sources/TableCard';\nexport {TablesListPanel} from './data-sources/TablesListPanel';\n\nexport {PanelHeaderButton} from './panels/RoomHeaderButton';\nexport {RoomPanel} from './panels/RoomPanel';\nexport {RoomPanelHeader} from './panels/RoomPanelHeader';\n\nexport {\n RoomShellSidebarButton,\n RoomShellSidebarButtons,\n SidebarButton,\n} from './RoomShellSidebarButtons';\n\nexport {createRoomShellSlice, useBaseRoomShellStore} from './RoomShellSlice';\nexport type {RoomShellSliceState} from './RoomShellSlice';\n\nexport type {StateCreator, StoreApi} from 'zustand';\n\nexport {DataSourceStatus} from './types';\nexport type {DataSourceState, RoomFileInfo, RoomFileState} from './types';\n\nexport type {RoomPanelInfo} from '@sqlrooms/layout';\n\n// Re-export from @sqlrooms/room-store\nexport {\n createBaseRoomSlice,\n createBaseSlice,\n createCommandSlice,\n createCommandCliAdapter,\n createCommandMcpAdapter,\n createPersistHelpers,\n createRoomCommandExecutionContext,\n createRoomSlice,\n createRoomStore,\n createRoomStoreCreator,\n createSlice,\n doesCommandRequireInput,\n exportCommandInputSchema,\n getCommandKeystrokes,\n getCommandInputComponent,\n getCommandShortcut,\n hasCommandSliceState,\n invokeCommandFromStore,\n isRoomSliceWithDestroy,\n isRoomSliceWithInitialize,\n listCommandsFromStore,\n persistSliceConfigs,\n registerCommandsForOwner,\n resolveCommandPolicyMetadata,\n RoomStateContext,\n RoomStateProvider,\n unregisterCommandsForOwner,\n useBaseRoomStore,\n validateCommandInput,\n useRoomStoreApi,\n} from '@sqlrooms/room-store';\nexport type {\n BaseRoomStore,\n BaseRoomStoreState,\n CommandCliAdapter,\n CommandCliAdapterOptions,\n CommandMcpAdapter,\n CommandMcpAdapterOptions,\n CommandMcpToolDescriptor,\n CommandSliceState,\n CreateCommandSliceProps,\n CreateBaseRoomSliceProps,\n RoomCommandDescriptor,\n RoomCommandExecuteOutput,\n RoomCommandKeystrokes,\n RoomCommandInvocation,\n RoomCommandInvokeFailureEvent,\n RoomCommandInvokeErrorEvent,\n RoomCommandInvocationOptions,\n RoomCommandInvokeStartEvent,\n RoomCommandInvokeSuccessEvent,\n RoomCommandMiddleware,\n RoomCommandMiddlewareNext,\n RegisteredRoomCommand,\n RoomCommand,\n RoomCommandInputComponent,\n RoomCommandInputComponentProps,\n RoomCommandListOptions,\n RoomCommandPolicyMetadata,\n RoomCommandPortableSchema,\n RoomCommandResult,\n RoomCommandRiskLevel,\n RoomCommandSurface,\n RoomCommandUiMetadata,\n RoomCommandExecutionContext,\n RoomCommandPredicate,\n RoomStateProviderProps,\n UseRoomStore,\n} from '@sqlrooms/room-store';\n\nexport {useShallow} from 'zustand/react/shallow';\n\n// Re-export from @sqlrooms/room-config (via room-store)\n// Values also export their corresponding types automatically (Zod pattern)\nexport {\n BaseDataSource,\n BaseRoomConfig,\n createDefaultBaseRoomConfig,\n createDefaultMosaicLayout,\n DataSource,\n DataSourceTypes,\n DEFAULT_MOSAIC_LAYOUT,\n DEFAULT_ROOM_TITLE,\n FileDataSource,\n isFileDataSource,\n isMosaicLayoutParent,\n isSpatialLoadFileOptions,\n isSqlQueryDataSource,\n isUrlDataSource,\n LayoutConfig,\n LayoutTypes,\n LoadFile,\n LoadFileOptions,\n MAIN_VIEW,\n MosaicLayoutConfig,\n MosaicLayoutDirection,\n MosaicLayoutNode,\n MosaicLayoutNodeKey,\n MosaicLayoutParent,\n SpatialLoadFileOptions,\n SpatialLoadOptions,\n SqlQueryDataSource,\n StandardLoadFileOptions,\n StandardLoadOptions,\n UrlDataSource,\n} from '@sqlrooms/room-store';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/room-shell",
|
|
3
|
-
"version": "0.28.0",
|
|
3
|
+
"version": "0.28.1-rc.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -26,14 +26,14 @@
|
|
|
26
26
|
"typedoc": "typedoc"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@sqlrooms/data-table": "0.28.0",
|
|
30
|
-
"@sqlrooms/duckdb": "0.28.0",
|
|
31
|
-
"@sqlrooms/layout": "0.28.0",
|
|
32
|
-
"@sqlrooms/monaco-editor": "0.28.0",
|
|
33
|
-
"@sqlrooms/room-config": "0.28.0",
|
|
34
|
-
"@sqlrooms/room-store": "0.28.0",
|
|
35
|
-
"@sqlrooms/ui": "0.28.0",
|
|
36
|
-
"@sqlrooms/utils": "0.28.0",
|
|
29
|
+
"@sqlrooms/data-table": "0.28.1-rc.0",
|
|
30
|
+
"@sqlrooms/duckdb": "0.28.1-rc.0",
|
|
31
|
+
"@sqlrooms/layout": "0.28.1-rc.0",
|
|
32
|
+
"@sqlrooms/monaco-editor": "0.28.1-rc.0",
|
|
33
|
+
"@sqlrooms/room-config": "0.28.1-rc.0",
|
|
34
|
+
"@sqlrooms/room-store": "0.28.1-rc.0",
|
|
35
|
+
"@sqlrooms/ui": "0.28.1-rc.0",
|
|
36
|
+
"@sqlrooms/utils": "0.28.1-rc.0",
|
|
37
37
|
"apache-arrow": "17.0.0",
|
|
38
38
|
"immer": "^11.0.1",
|
|
39
39
|
"lucide-react": "^0.556.0",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"react": ">=18",
|
|
46
46
|
"react-dom": ">=18"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "1e0dcae95d1ccdbcd1b32df1d647d0f794b94e5e"
|
|
49
49
|
}
|