@almadar/ui 2.17.0 → 2.18.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.
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var React3 = require('react');
3
+ var React2 = require('react');
4
4
  require('react/jsx-runtime');
5
5
  var reactQuery = require('@tanstack/react-query');
6
6
 
7
7
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
8
 
9
- var React3__default = /*#__PURE__*/_interopDefault(React3);
9
+ var React2__default = /*#__PURE__*/_interopDefault(React2);
10
10
 
11
11
  function useOrbitalHistory(options) {
12
12
  const { appId, authToken, userId, onHistoryChange, onRevertSuccess } = options;
13
- const getHeaders2 = React3.useCallback(() => {
13
+ const getHeaders2 = React2.useCallback(() => {
14
14
  const headers = {
15
15
  "Content-Type": "application/json"
16
16
  };
@@ -22,11 +22,11 @@ function useOrbitalHistory(options) {
22
22
  }
23
23
  return headers;
24
24
  }, [authToken, userId]);
25
- const [timeline, setTimeline] = React3.useState([]);
26
- const [currentVersion, setCurrentVersion] = React3.useState(1);
27
- const [isLoading, setIsLoading] = React3.useState(false);
28
- const [error, setError] = React3.useState(null);
29
- const refresh = React3.useCallback(async () => {
25
+ const [timeline, setTimeline] = React2.useState([]);
26
+ const [currentVersion, setCurrentVersion] = React2.useState(1);
27
+ const [isLoading, setIsLoading] = React2.useState(false);
28
+ const [error, setError] = React2.useState(null);
29
+ const refresh = React2.useCallback(async () => {
30
30
  if (!appId) return;
31
31
  setIsLoading(true);
32
32
  setError(null);
@@ -75,7 +75,7 @@ function useOrbitalHistory(options) {
75
75
  setIsLoading(false);
76
76
  }
77
77
  }, [appId, getHeaders2]);
78
- const revertToSnapshot = React3.useCallback(async (snapshotId) => {
78
+ const revertToSnapshot = React2.useCallback(async (snapshotId) => {
79
79
  if (!appId) {
80
80
  return { success: false, error: "No app ID provided" };
81
81
  }
@@ -109,12 +109,12 @@ function useOrbitalHistory(options) {
109
109
  };
110
110
  }
111
111
  }, [appId, getHeaders2, refresh, onRevertSuccess]);
112
- React3.useEffect(() => {
112
+ React2.useEffect(() => {
113
113
  if (appId && authToken && userId) {
114
114
  refresh();
115
115
  }
116
116
  }, [appId, authToken, userId]);
117
- React3.useEffect(() => {
117
+ React2.useEffect(() => {
118
118
  onHistoryChange?.(timeline);
119
119
  }, [timeline]);
120
120
  return {
@@ -127,15 +127,15 @@ function useOrbitalHistory(options) {
127
127
  };
128
128
  }
129
129
  function useFileSystem() {
130
- const [status, setStatus] = React3.useState("idle");
131
- const [error, setError] = React3.useState(null);
132
- const [isLoading, setIsLoading] = React3.useState(false);
133
- const [files, setFiles] = React3.useState([]);
134
- const [selectedFile, setSelectedFile] = React3.useState(null);
135
- const [selectedPath, setSelectedPath] = React3.useState(null);
136
- const [previewUrl, setPreviewUrl] = React3.useState(null);
137
- const [fileContents, setFileContents] = React3.useState(/* @__PURE__ */ new Map());
138
- const boot = React3.useCallback(async () => {
130
+ const [status, setStatus] = React2.useState("idle");
131
+ const [error, setError] = React2.useState(null);
132
+ const [isLoading, setIsLoading] = React2.useState(false);
133
+ const [files, setFiles] = React2.useState([]);
134
+ const [selectedFile, setSelectedFile] = React2.useState(null);
135
+ const [selectedPath, setSelectedPath] = React2.useState(null);
136
+ const [previewUrl, setPreviewUrl] = React2.useState(null);
137
+ const [fileContents, setFileContents] = React2.useState(/* @__PURE__ */ new Map());
138
+ const boot = React2.useCallback(async () => {
139
139
  setStatus("booting");
140
140
  setError(null);
141
141
  setIsLoading(true);
@@ -150,7 +150,7 @@ function useFileSystem() {
150
150
  setIsLoading(false);
151
151
  }
152
152
  }, []);
153
- const mountFiles = React3.useCallback(async (filesToMount) => {
153
+ const mountFiles = React2.useCallback(async (filesToMount) => {
154
154
  setIsLoading(true);
155
155
  try {
156
156
  let filesArray;
@@ -208,17 +208,17 @@ function useFileSystem() {
208
208
  setIsLoading(false);
209
209
  }
210
210
  }, []);
211
- const readFile = React3.useCallback(async (path) => {
211
+ const readFile = React2.useCallback(async (path) => {
212
212
  return fileContents.get(path) || "";
213
213
  }, [fileContents]);
214
- const writeFile = React3.useCallback(async (path, content) => {
214
+ const writeFile = React2.useCallback(async (path, content) => {
215
215
  setFileContents((prev) => {
216
216
  const next = new Map(prev);
217
217
  next.set(path, content);
218
218
  return next;
219
219
  });
220
220
  }, []);
221
- const selectFile = React3.useCallback(async (path) => {
221
+ const selectFile = React2.useCallback(async (path) => {
222
222
  const content = fileContents.get(path) || "";
223
223
  const ext = path.split(".").pop()?.toLowerCase() || "";
224
224
  const languageMap = {
@@ -240,7 +240,7 @@ function useFileSystem() {
240
240
  isDirty: false
241
241
  });
242
242
  }, [fileContents]);
243
- const updateContent = React3.useCallback((pathOrContent, contentArg) => {
243
+ const updateContent = React2.useCallback((pathOrContent, contentArg) => {
244
244
  const path = contentArg !== void 0 ? pathOrContent : selectedPath;
245
245
  const content = contentArg !== void 0 ? contentArg : pathOrContent;
246
246
  if (!path) {
@@ -256,17 +256,17 @@ function useFileSystem() {
256
256
  setSelectedFile((prev) => prev ? { ...prev, content, isDirty: true } : null);
257
257
  }
258
258
  }, [selectedPath]);
259
- const updateSelectedContent = React3.useCallback((content) => {
259
+ const updateSelectedContent = React2.useCallback((content) => {
260
260
  setSelectedFile((prev) => prev ? { ...prev, content, isDirty: true } : null);
261
261
  }, []);
262
- const refreshTree = React3.useCallback(async () => {
262
+ const refreshTree = React2.useCallback(async () => {
263
263
  console.log("[useFileSystem] Refreshing tree");
264
264
  }, []);
265
- const runCommand = React3.useCallback(async (command) => {
265
+ const runCommand = React2.useCallback(async (command) => {
266
266
  console.log("[useFileSystem] Running command:", command);
267
267
  return { exitCode: 0, output: "" };
268
268
  }, []);
269
- const startDevServer = React3.useCallback(async () => {
269
+ const startDevServer = React2.useCallback(async () => {
270
270
  console.log("[useFileSystem] Starting dev server");
271
271
  setPreviewUrl("http://localhost:5173");
272
272
  }, []);
@@ -303,14 +303,14 @@ var defaultManifest = {
303
303
  };
304
304
  function useExtensions(options) {
305
305
  const { appId, loadOnMount = true } = options;
306
- const [extensions, setExtensions] = React3.useState([]);
307
- const [manifest] = React3.useState(defaultManifest);
308
- const [isLoading, setIsLoading] = React3.useState(false);
309
- const [error, setError] = React3.useState(null);
310
- const loadExtension = React3.useCallback(async (extensionId) => {
306
+ const [extensions, setExtensions] = React2.useState([]);
307
+ const [manifest] = React2.useState(defaultManifest);
308
+ const [isLoading, setIsLoading] = React2.useState(false);
309
+ const [error, setError] = React2.useState(null);
310
+ const loadExtension = React2.useCallback(async (extensionId) => {
311
311
  console.log("[useExtensions] Loading extension:", extensionId);
312
312
  }, []);
313
- const loadExtensions = React3.useCallback(async () => {
313
+ const loadExtensions = React2.useCallback(async () => {
314
314
  setIsLoading(true);
315
315
  setError(null);
316
316
  try {
@@ -329,7 +329,7 @@ function useExtensions(options) {
329
329
  setIsLoading(false);
330
330
  }
331
331
  }, []);
332
- const getExtensionForFile = React3.useCallback((filename) => {
332
+ const getExtensionForFile = React2.useCallback((filename) => {
333
333
  const ext = filename.split(".").pop()?.toLowerCase();
334
334
  if (!ext) return null;
335
335
  const languageMap = {
@@ -347,7 +347,7 @@ function useExtensions(options) {
347
347
  if (!language) return null;
348
348
  return extensions.find((e) => e.language === language) || null;
349
349
  }, [extensions]);
350
- React3.useEffect(() => {
350
+ React2.useEffect(() => {
351
351
  if (!appId || !loadOnMount) return;
352
352
  const loadExtensions2 = async () => {
353
353
  setIsLoading(true);
@@ -382,11 +382,11 @@ function useExtensions(options) {
382
382
  }
383
383
  function useFileEditor(options) {
384
384
  const { extensions, fileSystem, onSchemaUpdate } = options;
385
- const [openFiles, setOpenFiles] = React3.useState([]);
386
- const [activeFilePath, setActiveFilePath] = React3.useState(null);
387
- const [isSaving, setIsSaving] = React3.useState(false);
385
+ const [openFiles, setOpenFiles] = React2.useState([]);
386
+ const [activeFilePath, setActiveFilePath] = React2.useState(null);
387
+ const [isSaving, setIsSaving] = React2.useState(false);
388
388
  const activeFile = openFiles.find((f) => f.path === activeFilePath) || null;
389
- const openFile = React3.useCallback(async (path) => {
389
+ const openFile = React2.useCallback(async (path) => {
390
390
  const existing = openFiles.find((f) => f.path === path);
391
391
  if (existing) {
392
392
  setActiveFilePath(path);
@@ -407,24 +407,24 @@ function useFileEditor(options) {
407
407
  console.error("[useFileEditor] Failed to open file:", err);
408
408
  }
409
409
  }, [openFiles, fileSystem, extensions]);
410
- const closeFile = React3.useCallback((path) => {
410
+ const closeFile = React2.useCallback((path) => {
411
411
  setOpenFiles((prev) => prev.filter((f) => f.path !== path));
412
412
  if (activeFilePath === path) {
413
413
  const remaining = openFiles.filter((f) => f.path !== path);
414
414
  setActiveFilePath(remaining.length > 0 ? remaining[0].path : null);
415
415
  }
416
416
  }, [activeFilePath, openFiles]);
417
- const setActiveFile = React3.useCallback((path) => {
417
+ const setActiveFile = React2.useCallback((path) => {
418
418
  setActiveFilePath(path);
419
419
  }, []);
420
- const updateFileContent = React3.useCallback((path, content) => {
420
+ const updateFileContent = React2.useCallback((path, content) => {
421
421
  setOpenFiles(
422
422
  (prev) => prev.map(
423
423
  (f) => f.path === path ? { ...f, content, isDirty: true } : f
424
424
  )
425
425
  );
426
426
  }, []);
427
- const handleFileEdit = React3.useCallback(async (path, content) => {
427
+ const handleFileEdit = React2.useCallback(async (path, content) => {
428
428
  try {
429
429
  await fileSystem.writeFile(path, content);
430
430
  let action = "saved";
@@ -446,7 +446,7 @@ function useFileEditor(options) {
446
446
  };
447
447
  }
448
448
  }, [fileSystem, onSchemaUpdate]);
449
- const saveFile = React3.useCallback(async (path) => {
449
+ const saveFile = React2.useCallback(async (path) => {
450
450
  const file = openFiles.find((f) => f.path === path);
451
451
  if (!file) return;
452
452
  setIsSaving(true);
@@ -470,7 +470,7 @@ function useFileEditor(options) {
470
470
  setIsSaving(false);
471
471
  }
472
472
  }, [openFiles, fileSystem, onSchemaUpdate]);
473
- const saveAllFiles = React3.useCallback(async () => {
473
+ const saveAllFiles = React2.useCallback(async () => {
474
474
  setIsSaving(true);
475
475
  try {
476
476
  const dirtyFiles = openFiles.filter((f) => f.isDirty);
@@ -495,11 +495,11 @@ function useFileEditor(options) {
495
495
  };
496
496
  }
497
497
  function useCompile() {
498
- const [isCompiling, setIsCompiling] = React3.useState(false);
499
- const [stage, setStage] = React3.useState("idle");
500
- const [lastResult, setLastResult] = React3.useState(null);
501
- const [error, setError] = React3.useState(null);
502
- const compileSchema = React3.useCallback(async (schema) => {
498
+ const [isCompiling, setIsCompiling] = React2.useState(false);
499
+ const [stage, setStage] = React2.useState("idle");
500
+ const [lastResult, setLastResult] = React2.useState(null);
501
+ const [error, setError] = React2.useState(null);
502
+ const compileSchema = React2.useCallback(async (schema) => {
503
503
  setIsCompiling(true);
504
504
  setStage("compiling");
505
505
  setError(null);
@@ -531,18 +531,18 @@ function useCompile() {
531
531
  };
532
532
  }
533
533
  function usePreview(options) {
534
- const [previewUrl, setPreviewUrl] = React3.useState(null);
535
- const [isLoading, setIsLoading] = React3.useState(!!options?.appId);
536
- const [error, setError] = React3.useState(null);
537
- const [loadError, setLoadError] = React3.useState(null);
538
- const [app, setApp] = React3.useState(null);
539
- const [isFullscreen, setIsFullscreen] = React3.useState(false);
540
- const [isExecutingEvent, setIsExecutingEvent] = React3.useState(false);
541
- const [errorToast, setErrorToast] = React3.useState(null);
542
- const [currentStateName, setCurrentStateName] = React3.useState(null);
543
- const [notificationsList, setNotificationsList] = React3.useState([]);
544
- const [isPanelOpen, setIsPanelOpen] = React3.useState(false);
545
- const notifications = React3.useMemo(() => ({
534
+ const [previewUrl, setPreviewUrl] = React2.useState(null);
535
+ const [isLoading, setIsLoading] = React2.useState(!!options?.appId);
536
+ const [error, setError] = React2.useState(null);
537
+ const [loadError, setLoadError] = React2.useState(null);
538
+ const [app, setApp] = React2.useState(null);
539
+ const [isFullscreen, setIsFullscreen] = React2.useState(false);
540
+ const [isExecutingEvent, setIsExecutingEvent] = React2.useState(false);
541
+ const [errorToast, setErrorToast] = React2.useState(null);
542
+ const [currentStateName, setCurrentStateName] = React2.useState(null);
543
+ const [notificationsList, setNotificationsList] = React2.useState([]);
544
+ const [isPanelOpen, setIsPanelOpen] = React2.useState(false);
545
+ const notifications = React2.useMemo(() => ({
546
546
  notifications: notificationsList,
547
547
  isPanelOpen,
548
548
  closePanel: () => setIsPanelOpen(false),
@@ -556,7 +556,7 @@ function usePreview(options) {
556
556
  },
557
557
  clearAll: () => setNotificationsList([])
558
558
  }), [notificationsList, isPanelOpen]);
559
- React3.useEffect(() => {
559
+ React2.useEffect(() => {
560
560
  const appId = options?.appId;
561
561
  if (!appId) {
562
562
  setApp(null);
@@ -567,10 +567,10 @@ function usePreview(options) {
567
567
  setPreviewUrl(`/api/orbitals/${appId}`);
568
568
  setIsLoading(false);
569
569
  }, [options?.appId]);
570
- const startPreview = React3.useCallback(async () => {
570
+ const startPreview = React2.useCallback(async () => {
571
571
  console.log("[usePreview] startPreview called");
572
572
  }, []);
573
- const stopPreview = React3.useCallback(async () => {
573
+ const stopPreview = React2.useCallback(async () => {
574
574
  setIsLoading(true);
575
575
  try {
576
576
  console.log("[usePreview] Stopping preview server...");
@@ -580,16 +580,16 @@ function usePreview(options) {
580
580
  setIsLoading(false);
581
581
  }
582
582
  }, []);
583
- const refresh = React3.useCallback(async () => {
583
+ const refresh = React2.useCallback(async () => {
584
584
  if (!previewUrl) return;
585
585
  console.log("[usePreview] Refreshing preview...");
586
586
  setPreviewUrl(`${previewUrl.split("?")[0]}?t=${Date.now()}`);
587
587
  }, [previewUrl]);
588
- const handleRefresh = React3.useCallback(async () => {
588
+ const handleRefresh = React2.useCallback(async () => {
589
589
  console.log("[usePreview] Handle refresh...");
590
590
  await refresh();
591
591
  }, [refresh]);
592
- const handleReset = React3.useCallback(async () => {
592
+ const handleReset = React2.useCallback(async () => {
593
593
  console.log("[usePreview] Resetting preview...");
594
594
  setError(null);
595
595
  setLoadError(null);
@@ -597,10 +597,10 @@ function usePreview(options) {
597
597
  setIsExecutingEvent(false);
598
598
  setCurrentStateName(null);
599
599
  }, []);
600
- const toggleFullscreen = React3.useCallback(() => {
600
+ const toggleFullscreen = React2.useCallback(() => {
601
601
  setIsFullscreen((prev) => !prev);
602
602
  }, []);
603
- const dismissErrorToast = React3.useCallback(() => {
603
+ const dismissErrorToast = React2.useCallback(() => {
604
604
  setErrorToast(null);
605
605
  }, []);
606
606
  return {
@@ -625,16 +625,16 @@ function usePreview(options) {
625
625
  };
626
626
  }
627
627
  function useAgentChat(options) {
628
- const [messages, setMessages] = React3.useState([]);
629
- const [status, setStatus] = React3.useState("idle");
630
- const [activities, setActivities] = React3.useState([]);
631
- const [todos, setTodos] = React3.useState([]);
632
- const [schemaDiffs, setSchemaDiffs] = React3.useState([]);
633
- const [isLoading, setIsLoading] = React3.useState(false);
634
- const [error, setError] = React3.useState(null);
635
- const [threadId] = React3.useState(null);
636
- const [interrupt, setInterrupt] = React3.useState(null);
637
- const sendMessage = React3.useCallback(async (content) => {
628
+ const [messages, setMessages] = React2.useState([]);
629
+ const [status, setStatus] = React2.useState("idle");
630
+ const [activities, setActivities] = React2.useState([]);
631
+ const [todos, setTodos] = React2.useState([]);
632
+ const [schemaDiffs, setSchemaDiffs] = React2.useState([]);
633
+ const [isLoading, setIsLoading] = React2.useState(false);
634
+ const [error, setError] = React2.useState(null);
635
+ const [threadId] = React2.useState(null);
636
+ const [interrupt, setInterrupt] = React2.useState(null);
637
+ const sendMessage = React2.useCallback(async (content) => {
638
638
  setIsLoading(true);
639
639
  setStatus("running");
640
640
  setError(null);
@@ -663,7 +663,7 @@ function useAgentChat(options) {
663
663
  setIsLoading(false);
664
664
  }
665
665
  }, [options]);
666
- const startGeneration = React3.useCallback(async (skill, prompt, genOptions) => {
666
+ const startGeneration = React2.useCallback(async (skill, prompt, genOptions) => {
667
667
  setStatus("running");
668
668
  setIsLoading(true);
669
669
  setError(null);
@@ -680,22 +680,22 @@ function useAgentChat(options) {
680
680
  setIsLoading(false);
681
681
  }
682
682
  }, [options]);
683
- const continueConversation = React3.useCallback(async (message) => {
683
+ const continueConversation = React2.useCallback(async (message) => {
684
684
  console.log("[useAgentChat] Continue conversation", message);
685
685
  }, []);
686
- const resumeWithDecision = React3.useCallback(async (decisions) => {
686
+ const resumeWithDecision = React2.useCallback(async (decisions) => {
687
687
  console.log("[useAgentChat] Resume with decision:", decisions);
688
688
  setInterrupt(null);
689
689
  }, []);
690
- const cancel = React3.useCallback(() => {
690
+ const cancel = React2.useCallback(() => {
691
691
  setStatus("idle");
692
692
  setIsLoading(false);
693
693
  setInterrupt(null);
694
694
  }, []);
695
- const clearMessages = React3.useCallback(() => {
695
+ const clearMessages = React2.useCallback(() => {
696
696
  setMessages([]);
697
697
  }, []);
698
- const clearHistory = React3.useCallback(() => {
698
+ const clearHistory = React2.useCallback(() => {
699
699
  setMessages([]);
700
700
  setActivities([]);
701
701
  setTodos([]);
@@ -722,13 +722,13 @@ function useAgentChat(options) {
722
722
  };
723
723
  }
724
724
  function useValidation() {
725
- const [result, setResult] = React3.useState(null);
726
- const [isValidating, setIsValidating] = React3.useState(false);
727
- const [error, setError] = React3.useState(null);
728
- const [stage, setStage] = React3.useState("idle");
729
- const [isFixing, setIsFixing] = React3.useState(false);
730
- const [progressMessage, setProgressMessage] = React3.useState(null);
731
- const validate = React3.useCallback(async (appId) => {
725
+ const [result, setResult] = React2.useState(null);
726
+ const [isValidating, setIsValidating] = React2.useState(false);
727
+ const [error, setError] = React2.useState(null);
728
+ const [stage, setStage] = React2.useState("idle");
729
+ const [isFixing, setIsFixing] = React2.useState(false);
730
+ const [progressMessage, setProgressMessage] = React2.useState(null);
731
+ const validate = React2.useCallback(async (appId) => {
732
732
  setIsValidating(true);
733
733
  setError(null);
734
734
  setStage("validating");
@@ -760,11 +760,11 @@ function useValidation() {
760
760
  setIsValidating(false);
761
761
  }
762
762
  }, []);
763
- const clearResult = React3.useCallback(() => {
763
+ const clearResult = React2.useCallback(() => {
764
764
  setResult(null);
765
765
  setError(null);
766
766
  }, []);
767
- const reset = React3.useCallback(() => {
767
+ const reset = React2.useCallback(() => {
768
768
  setResult(null);
769
769
  setError(null);
770
770
  setStage("idle");
@@ -788,15 +788,15 @@ function useValidation() {
788
788
  };
789
789
  }
790
790
  function useDeepAgentGeneration() {
791
- const [requests, setRequests] = React3.useState([]);
792
- const [currentRequest, setCurrentRequest] = React3.useState(null);
793
- const [isGenerating, setIsGenerating] = React3.useState(false);
794
- const [isLoading, setIsLoading] = React3.useState(false);
795
- const [isComplete, setIsComplete] = React3.useState(false);
796
- const [progress, setProgress] = React3.useState({ stage: "idle", percent: 0, message: "" });
797
- const [error, setError] = React3.useState(null);
798
- const [interrupt, setInterrupt] = React3.useState(null);
799
- const generate = React3.useCallback(async (prompt) => {
791
+ const [requests, setRequests] = React2.useState([]);
792
+ const [currentRequest, setCurrentRequest] = React2.useState(null);
793
+ const [isGenerating, setIsGenerating] = React2.useState(false);
794
+ const [isLoading, setIsLoading] = React2.useState(false);
795
+ const [isComplete, setIsComplete] = React2.useState(false);
796
+ const [progress, setProgress] = React2.useState({ stage: "idle", percent: 0, message: "" });
797
+ const [error, setError] = React2.useState(null);
798
+ const [interrupt, setInterrupt] = React2.useState(null);
799
+ const generate = React2.useCallback(async (prompt) => {
800
800
  setIsGenerating(true);
801
801
  setIsLoading(true);
802
802
  setIsComplete(false);
@@ -829,11 +829,11 @@ function useDeepAgentGeneration() {
829
829
  setIsLoading(false);
830
830
  }
831
831
  }, []);
832
- const startGeneration = React3.useCallback(async (skill, prompt, _options) => {
832
+ const startGeneration = React2.useCallback(async (skill, prompt, _options) => {
833
833
  console.log("[useDeepAgentGeneration] Starting generation with skill:", skill);
834
834
  await generate(prompt);
835
835
  }, [generate]);
836
- const cancelGeneration = React3.useCallback(() => {
836
+ const cancelGeneration = React2.useCallback(() => {
837
837
  if (currentRequest) {
838
838
  currentRequest.status = "failed";
839
839
  currentRequest.error = "Cancelled by user";
@@ -844,14 +844,14 @@ function useDeepAgentGeneration() {
844
844
  setIsComplete(false);
845
845
  setProgress({ stage: "idle", percent: 0, message: "" });
846
846
  }, [currentRequest]);
847
- const clearRequests = React3.useCallback(() => {
847
+ const clearRequests = React2.useCallback(() => {
848
848
  setRequests([]);
849
849
  setCurrentRequest(null);
850
850
  setError(null);
851
851
  setProgress({ stage: "idle", percent: 0, message: "" });
852
852
  setIsComplete(false);
853
853
  }, []);
854
- const submitInterruptDecisions = React3.useCallback((decisions) => {
854
+ const submitInterruptDecisions = React2.useCallback((decisions) => {
855
855
  console.log("[useDeepAgentGeneration] Submitting interrupt decisions:", decisions);
856
856
  setInterrupt(null);
857
857
  }, []);
@@ -871,7 +871,7 @@ function useDeepAgentGeneration() {
871
871
  submitInterruptDecisions
872
872
  };
873
873
  }
874
- var EventBusContext = React3.createContext(null);
874
+ var EventBusContext = React2.createContext(null);
875
875
 
876
876
  // hooks/useEventBus.ts
877
877
  function getGlobalEventBus() {
@@ -941,14 +941,14 @@ var fallbackEventBus = {
941
941
  }
942
942
  };
943
943
  function useEventBus() {
944
- const context = React3.useContext(EventBusContext);
944
+ const context = React2.useContext(EventBusContext);
945
945
  return context ?? getGlobalEventBus() ?? fallbackEventBus;
946
946
  }
947
947
  function useEventListener(event, handler) {
948
948
  const eventBus = useEventBus();
949
- const handlerRef = React3.useRef(handler);
949
+ const handlerRef = React2.useRef(handler);
950
950
  handlerRef.current = handler;
951
- React3.useEffect(() => {
951
+ React2.useEffect(() => {
952
952
  const wrappedHandler = (evt) => {
953
953
  handlerRef.current(evt);
954
954
  };
@@ -960,7 +960,7 @@ function useEventListener(event, handler) {
960
960
  }
961
961
  function useEmitEvent() {
962
962
  const eventBus = useEventBus();
963
- return React3.useCallback(
963
+ return React2.useCallback(
964
964
  (type, payload) => {
965
965
  eventBus.emit(type, payload);
966
966
  },
@@ -986,16 +986,16 @@ function generateId() {
986
986
  return `slot-content-${++idCounter}-${Date.now()}`;
987
987
  }
988
988
  function useUISlotManager() {
989
- const [slots, setSlots] = React3.useState(DEFAULT_SLOTS);
990
- const subscribersRef = React3.useRef(/* @__PURE__ */ new Set());
991
- const timersRef = React3.useRef(/* @__PURE__ */ new Map());
992
- React3.useEffect(() => {
989
+ const [slots, setSlots] = React2.useState(DEFAULT_SLOTS);
990
+ const subscribersRef = React2.useRef(/* @__PURE__ */ new Set());
991
+ const timersRef = React2.useRef(/* @__PURE__ */ new Map());
992
+ React2.useEffect(() => {
993
993
  return () => {
994
994
  timersRef.current.forEach((timer) => clearTimeout(timer));
995
995
  timersRef.current.clear();
996
996
  };
997
997
  }, []);
998
- const notifySubscribers = React3.useCallback((slot, content) => {
998
+ const notifySubscribers = React2.useCallback((slot, content) => {
999
999
  subscribersRef.current.forEach((callback) => {
1000
1000
  try {
1001
1001
  callback(slot, content);
@@ -1004,7 +1004,7 @@ function useUISlotManager() {
1004
1004
  }
1005
1005
  });
1006
1006
  }, []);
1007
- const render = React3.useCallback((config) => {
1007
+ const render = React2.useCallback((config) => {
1008
1008
  const id = generateId();
1009
1009
  const content = {
1010
1010
  id,
@@ -1043,7 +1043,7 @@ function useUISlotManager() {
1043
1043
  });
1044
1044
  return id;
1045
1045
  }, [notifySubscribers]);
1046
- const clear = React3.useCallback((slot) => {
1046
+ const clear = React2.useCallback((slot) => {
1047
1047
  setSlots((prev) => {
1048
1048
  const content = prev[slot];
1049
1049
  if (content) {
@@ -1058,7 +1058,7 @@ function useUISlotManager() {
1058
1058
  return { ...prev, [slot]: null };
1059
1059
  });
1060
1060
  }, [notifySubscribers]);
1061
- const clearById = React3.useCallback((id) => {
1061
+ const clearById = React2.useCallback((id) => {
1062
1062
  setSlots((prev) => {
1063
1063
  const entry = Object.entries(prev).find(([, content]) => content?.id === id);
1064
1064
  if (entry) {
@@ -1075,7 +1075,7 @@ function useUISlotManager() {
1075
1075
  return prev;
1076
1076
  });
1077
1077
  }, [notifySubscribers]);
1078
- const clearAll = React3.useCallback(() => {
1078
+ const clearAll = React2.useCallback(() => {
1079
1079
  timersRef.current.forEach((timer) => clearTimeout(timer));
1080
1080
  timersRef.current.clear();
1081
1081
  setSlots((prev) => {
@@ -1088,16 +1088,16 @@ function useUISlotManager() {
1088
1088
  return DEFAULT_SLOTS;
1089
1089
  });
1090
1090
  }, [notifySubscribers]);
1091
- const subscribe2 = React3.useCallback((callback) => {
1091
+ const subscribe2 = React2.useCallback((callback) => {
1092
1092
  subscribersRef.current.add(callback);
1093
1093
  return () => {
1094
1094
  subscribersRef.current.delete(callback);
1095
1095
  };
1096
1096
  }, []);
1097
- const hasContent = React3.useCallback((slot) => {
1097
+ const hasContent = React2.useCallback((slot) => {
1098
1098
  return slots[slot] !== null;
1099
1099
  }, [slots]);
1100
- const getContent = React3.useCallback((slot) => {
1100
+ const getContent = React2.useCallback((slot) => {
1101
1101
  return slots[slot];
1102
1102
  }, [slots]);
1103
1103
  return {
@@ -1111,7 +1111,7 @@ function useUISlotManager() {
1111
1111
  getContent
1112
1112
  };
1113
1113
  }
1114
- var SelectionContext = React3.createContext(null);
1114
+ var SelectionContext = React2.createContext(null);
1115
1115
 
1116
1116
  // hooks/useUIEvents.ts
1117
1117
  var UI_EVENT_MAP = {
@@ -1143,12 +1143,12 @@ function useUIEvents(dispatch, validEvents, eventBusInstance) {
1143
1143
  const defaultEventBus = useEventBus();
1144
1144
  const eventBus = eventBusInstance ?? defaultEventBus;
1145
1145
  const validEventsKey = validEvents ? validEvents.slice().sort().join(",") : "";
1146
- const stableValidEvents = React3.useMemo(
1146
+ const stableValidEvents = React2.useMemo(
1147
1147
  () => validEvents,
1148
1148
  [validEventsKey]
1149
1149
  // intentional — validEventsKey is the stable dep, not validEvents array ref
1150
1150
  );
1151
- React3.useEffect(() => {
1151
+ React2.useEffect(() => {
1152
1152
  const unsubscribes = [];
1153
1153
  Object.entries(UI_EVENT_MAP).forEach(([uiEvent, smEvent]) => {
1154
1154
  const handler = (event) => {
@@ -1199,9 +1199,9 @@ function useSelectedEntity(eventBusInstance) {
1199
1199
  const defaultEventBus = useEventBus();
1200
1200
  const eventBus = eventBusInstance ?? defaultEventBus;
1201
1201
  const selectionContext = useSelectionContext();
1202
- const [localSelected, setLocalSelected] = React3.useState(null);
1202
+ const [localSelected, setLocalSelected] = React2.useState(null);
1203
1203
  const usingContext = selectionContext !== null;
1204
- React3.useEffect(() => {
1204
+ React2.useEffect(() => {
1205
1205
  if (usingContext) return;
1206
1206
  const handleSelect = (event) => {
1207
1207
  const row = event.payload?.row;
@@ -1231,22 +1231,22 @@ function useSelectedEntity(eventBusInstance) {
1231
1231
  return [localSelected, setLocalSelected];
1232
1232
  }
1233
1233
  function useSelectionContext() {
1234
- const context = React3.useContext(SelectionContext);
1234
+ const context = React2.useContext(SelectionContext);
1235
1235
  return context;
1236
1236
  }
1237
- var EntityDataContext = React3.createContext(null);
1237
+ var EntityDataContext = React2.createContext(null);
1238
1238
  function EntityDataProvider({
1239
1239
  adapter,
1240
1240
  children
1241
1241
  }) {
1242
- return React3__default.default.createElement(
1242
+ return React2__default.default.createElement(
1243
1243
  EntityDataContext.Provider,
1244
1244
  { value: adapter },
1245
1245
  children
1246
1246
  );
1247
1247
  }
1248
1248
  function useEntityDataAdapter() {
1249
- return React3.useContext(EntityDataContext);
1249
+ return React2.useContext(EntityDataContext);
1250
1250
  }
1251
1251
  var entityDataKeys = {
1252
1252
  all: ["entities"],
@@ -1257,15 +1257,15 @@ var entityDataKeys = {
1257
1257
  };
1258
1258
  function useEntityList(entity, options = {}) {
1259
1259
  const { skip = false } = options;
1260
- const adapter = React3.useContext(EntityDataContext);
1261
- const adapterData = React3.useMemo(() => {
1260
+ const adapter = React2.useContext(EntityDataContext);
1261
+ const adapterData = React2.useMemo(() => {
1262
1262
  if (!adapter || !entity || skip) return [];
1263
1263
  return adapter.getData(entity);
1264
1264
  }, [adapter, entity, skip, adapter?.isLoading]);
1265
- const [stubData, setStubData] = React3.useState([]);
1266
- const [stubLoading, setStubLoading] = React3.useState(!skip && !!entity && !adapter);
1267
- const [stubError, setStubError] = React3.useState(null);
1268
- React3.useEffect(() => {
1265
+ const [stubData, setStubData] = React2.useState([]);
1266
+ const [stubLoading, setStubLoading] = React2.useState(!skip && !!entity && !adapter);
1267
+ const [stubError, setStubError] = React2.useState(null);
1268
+ React2.useEffect(() => {
1269
1269
  if (adapter || skip || !entity) {
1270
1270
  setStubLoading(false);
1271
1271
  return;
@@ -1290,15 +1290,15 @@ function useEntityList(entity, options = {}) {
1290
1290
  } };
1291
1291
  }
1292
1292
  function useEntity(entity, id) {
1293
- const adapter = React3.useContext(EntityDataContext);
1294
- const adapterData = React3.useMemo(() => {
1293
+ const adapter = React2.useContext(EntityDataContext);
1294
+ const adapterData = React2.useMemo(() => {
1295
1295
  if (!adapter || !entity || !id) return null;
1296
1296
  return adapter.getById(entity, id) ?? null;
1297
1297
  }, [adapter, entity, id, adapter?.isLoading]);
1298
- const [stubData, setStubData] = React3.useState(null);
1299
- const [stubLoading, setStubLoading] = React3.useState(!!entity && !!id && !adapter);
1300
- const [stubError, setStubError] = React3.useState(null);
1301
- React3.useEffect(() => {
1298
+ const [stubData, setStubData] = React2.useState(null);
1299
+ const [stubLoading, setStubLoading] = React2.useState(!!entity && !!id && !adapter);
1300
+ const [stubError, setStubError] = React2.useState(null);
1301
+ React2.useEffect(() => {
1302
1302
  if (adapter || !entity || !id) {
1303
1303
  setStubLoading(false);
1304
1304
  return;
@@ -1329,7 +1329,7 @@ function getSuspenseCacheKey(entity, type, id) {
1329
1329
  return id ? `${type}:${entity}:${id}` : `${type}:${entity}`;
1330
1330
  }
1331
1331
  function useEntityListSuspense(entity) {
1332
- const adapter = React3.useContext(EntityDataContext);
1332
+ const adapter = React2.useContext(EntityDataContext);
1333
1333
  if (adapter) {
1334
1334
  if (adapter.isLoading) {
1335
1335
  const cacheKey2 = getSuspenseCacheKey(entity, "list");
@@ -1383,7 +1383,7 @@ function useEntityListSuspense(entity) {
1383
1383
  } };
1384
1384
  }
1385
1385
  function useEntitySuspense(entity, id) {
1386
- const adapter = React3.useContext(EntityDataContext);
1386
+ const adapter = React2.useContext(EntityDataContext);
1387
1387
  if (adapter) {
1388
1388
  if (adapter.isLoading) {
1389
1389
  const cacheKey2 = getSuspenseCacheKey(entity, "detail", id);
@@ -1450,35 +1450,35 @@ function getOrCreateStore(query) {
1450
1450
  return queryStores.get(query);
1451
1451
  }
1452
1452
  function useQuerySingleton(query) {
1453
- const [, forceUpdate] = React3.useState({});
1453
+ const [, forceUpdate] = React2.useState({});
1454
1454
  if (!query) {
1455
1455
  return null;
1456
1456
  }
1457
- const store = React3.useMemo(() => getOrCreateStore(query), [query]);
1458
- React3.useMemo(() => {
1457
+ const store = React2.useMemo(() => getOrCreateStore(query), [query]);
1458
+ React2.useMemo(() => {
1459
1459
  const listener = () => forceUpdate({});
1460
1460
  store.listeners.add(listener);
1461
1461
  return () => {
1462
1462
  store.listeners.delete(listener);
1463
1463
  };
1464
1464
  }, [store]);
1465
- const notifyListeners = React3.useCallback(() => {
1465
+ const notifyListeners = React2.useCallback(() => {
1466
1466
  store.listeners.forEach((listener) => listener());
1467
1467
  }, [store]);
1468
- const setSearch = React3.useCallback((value) => {
1468
+ const setSearch = React2.useCallback((value) => {
1469
1469
  store.search = value;
1470
1470
  notifyListeners();
1471
1471
  }, [store, notifyListeners]);
1472
- const setFilter = React3.useCallback((key, value) => {
1472
+ const setFilter = React2.useCallback((key, value) => {
1473
1473
  store.filters = { ...store.filters, [key]: value };
1474
1474
  notifyListeners();
1475
1475
  }, [store, notifyListeners]);
1476
- const clearFilters = React3.useCallback(() => {
1476
+ const clearFilters = React2.useCallback(() => {
1477
1477
  store.filters = {};
1478
1478
  store.search = "";
1479
1479
  notifyListeners();
1480
1480
  }, [store, notifyListeners]);
1481
- const setSort = React3.useCallback((field, direction) => {
1481
+ const setSort = React2.useCallback((field, direction) => {
1482
1482
  store.sortField = field;
1483
1483
  store.sortDirection = direction;
1484
1484
  notifyListeners();
@@ -1945,7 +1945,7 @@ function getSnapshot() {
1945
1945
 
1946
1946
  // hooks/useEntities.ts
1947
1947
  function useEntities() {
1948
- const entities2 = React3.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1948
+ const entities2 = React2.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1949
1949
  return {
1950
1950
  entities: entities2,
1951
1951
  getEntity,
@@ -1960,34 +1960,34 @@ function useEntities() {
1960
1960
  };
1961
1961
  }
1962
1962
  function useEntity2(id) {
1963
- const entities2 = React3.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1963
+ const entities2 = React2.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1964
1964
  return entities2.get(id);
1965
1965
  }
1966
1966
  function useEntitiesByType(type) {
1967
- const entities2 = React3.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1967
+ const entities2 = React2.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1968
1968
  return [...entities2.values()].filter((e) => e.type === type);
1969
1969
  }
1970
1970
  function useSingletonEntity(type) {
1971
- const entities2 = React3.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1971
+ const entities2 = React2.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
1972
1972
  return [...entities2.values()].find((e) => e.type === type);
1973
1973
  }
1974
1974
  function usePlayer() {
1975
1975
  const player = useSingletonEntity("Player");
1976
- const update = React3.useCallback((updates) => {
1976
+ const update = React2.useCallback((updates) => {
1977
1977
  if (player) updateEntity(player.id, updates);
1978
1978
  }, [player?.id]);
1979
1979
  return { player, updatePlayer: update };
1980
1980
  }
1981
1981
  function usePhysics() {
1982
1982
  const physics = useSingletonEntity("Physics");
1983
- const update = React3.useCallback((updates) => {
1983
+ const update = React2.useCallback((updates) => {
1984
1984
  if (physics) updateEntity(physics.id, updates);
1985
1985
  }, [physics?.id]);
1986
1986
  return { physics, updatePhysics: update };
1987
1987
  }
1988
1988
  function useInput() {
1989
1989
  const input = useSingletonEntity("Input");
1990
- const update = React3.useCallback((updates) => {
1990
+ const update = React2.useCallback((updates) => {
1991
1991
  if (input) updateEntity(input.id, updates);
1992
1992
  }, [input?.id]);
1993
1993
  return { input, updateInput: update };
@@ -2102,7 +2102,7 @@ var en_default = {
2102
2102
  // hooks/useTranslate.ts
2103
2103
  var { $meta: _meta, ...coreMessages } = en_default;
2104
2104
  var coreLocale = coreMessages;
2105
- var I18nContext = React3.createContext({
2105
+ var I18nContext = React2.createContext({
2106
2106
  locale: "en",
2107
2107
  direction: "ltr",
2108
2108
  t: (key) => coreLocale[key] ?? key
@@ -2111,7 +2111,7 @@ var I18nContext = React3.createContext({
2111
2111
  I18nContext.displayName = "I18nContext";
2112
2112
  var I18nProvider = I18nContext.Provider;
2113
2113
  function useTranslate() {
2114
- return React3.useContext(I18nContext);
2114
+ return React2.useContext(I18nContext);
2115
2115
  }
2116
2116
  function createTranslate(messages) {
2117
2117
  return (key, params) => {
@@ -2127,7 +2127,7 @@ function createTranslate(messages) {
2127
2127
  function useResolvedEntity(entity, data) {
2128
2128
  const shouldFetch = !data && !!entity;
2129
2129
  const fetched = useEntityList(entity, { skip: !shouldFetch });
2130
- return React3.useMemo(() => {
2130
+ return React2.useMemo(() => {
2131
2131
  if (data) {
2132
2132
  return {
2133
2133
  data,
@@ -2156,14 +2156,14 @@ function useAuthContext() {
2156
2156
  }
2157
2157
  function useSwipeGesture(callbacks, options = {}) {
2158
2158
  const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
2159
- const startX = React3.useRef(0);
2160
- const startY = React3.useRef(0);
2161
- const startTime = React3.useRef(0);
2162
- const currentX = React3.useRef(0);
2163
- const tracking = React3.useRef(false);
2164
- const offsetXRef = React3.useRef(0);
2165
- const isSwipingRef = React3.useRef(false);
2166
- const onPointerDown = React3.useCallback((e) => {
2159
+ const startX = React2.useRef(0);
2160
+ const startY = React2.useRef(0);
2161
+ const startTime = React2.useRef(0);
2162
+ const currentX = React2.useRef(0);
2163
+ const tracking = React2.useRef(false);
2164
+ const offsetXRef = React2.useRef(0);
2165
+ const isSwipingRef = React2.useRef(false);
2166
+ const onPointerDown = React2.useCallback((e) => {
2167
2167
  startX.current = e.clientX;
2168
2168
  startY.current = e.clientY;
2169
2169
  currentX.current = e.clientX;
@@ -2173,7 +2173,7 @@ function useSwipeGesture(callbacks, options = {}) {
2173
2173
  offsetXRef.current = 0;
2174
2174
  e.target.setPointerCapture?.(e.pointerId);
2175
2175
  }, []);
2176
- const onPointerMove = React3.useCallback((e) => {
2176
+ const onPointerMove = React2.useCallback((e) => {
2177
2177
  if (!tracking.current) return;
2178
2178
  if (preventDefault) e.preventDefault();
2179
2179
  currentX.current = e.clientX;
@@ -2184,7 +2184,7 @@ function useSwipeGesture(callbacks, options = {}) {
2184
2184
  offsetXRef.current = dx;
2185
2185
  }
2186
2186
  }, [preventDefault]);
2187
- const onPointerUp = React3.useCallback((e) => {
2187
+ const onPointerUp = React2.useCallback((e) => {
2188
2188
  if (!tracking.current) return;
2189
2189
  tracking.current = false;
2190
2190
  const dx = e.clientX - startX.current;
@@ -2202,7 +2202,7 @@ function useSwipeGesture(callbacks, options = {}) {
2202
2202
  else if (dy > threshold) callbacks.onSwipeDown?.();
2203
2203
  }
2204
2204
  }, [threshold, velocityThreshold, callbacks]);
2205
- const onPointerCancel = React3.useCallback(() => {
2205
+ const onPointerCancel = React2.useCallback(() => {
2206
2206
  tracking.current = false;
2207
2207
  offsetXRef.current = 0;
2208
2208
  isSwipingRef.current = false;
@@ -2218,18 +2218,18 @@ function useSwipeGesture(callbacks, options = {}) {
2218
2218
  }
2219
2219
  function useLongPress(onLongPress, options = {}) {
2220
2220
  const { duration = 500, moveThreshold = 10 } = options;
2221
- const timerRef = React3.useRef(null);
2222
- const startPos = React3.useRef({ x: 0, y: 0 });
2223
- const isPressedRef = React3.useRef(false);
2224
- const firedRef = React3.useRef(false);
2225
- const cancel = React3.useCallback(() => {
2221
+ const timerRef = React2.useRef(null);
2222
+ const startPos = React2.useRef({ x: 0, y: 0 });
2223
+ const isPressedRef = React2.useRef(false);
2224
+ const firedRef = React2.useRef(false);
2225
+ const cancel = React2.useCallback(() => {
2226
2226
  if (timerRef.current) {
2227
2227
  clearTimeout(timerRef.current);
2228
2228
  timerRef.current = null;
2229
2229
  }
2230
2230
  isPressedRef.current = false;
2231
2231
  }, []);
2232
- const onPointerDown = React3.useCallback((e) => {
2232
+ const onPointerDown = React2.useCallback((e) => {
2233
2233
  firedRef.current = false;
2234
2234
  startPos.current = { x: e.clientX, y: e.clientY };
2235
2235
  isPressedRef.current = true;
@@ -2239,7 +2239,7 @@ function useLongPress(onLongPress, options = {}) {
2239
2239
  onLongPress();
2240
2240
  }, duration);
2241
2241
  }, [duration, onLongPress]);
2242
- const onPointerMove = React3.useCallback((e) => {
2242
+ const onPointerMove = React2.useCallback((e) => {
2243
2243
  if (!isPressedRef.current) return;
2244
2244
  const dx = e.clientX - startPos.current.x;
2245
2245
  const dy = e.clientY - startPos.current.y;
@@ -2247,10 +2247,10 @@ function useLongPress(onLongPress, options = {}) {
2247
2247
  cancel();
2248
2248
  }
2249
2249
  }, [moveThreshold, cancel]);
2250
- const onPointerUp = React3.useCallback(() => {
2250
+ const onPointerUp = React2.useCallback(() => {
2251
2251
  cancel();
2252
2252
  }, [cancel]);
2253
- const onPointerCancel = React3.useCallback(() => {
2253
+ const onPointerCancel = React2.useCallback(() => {
2254
2254
  cancel();
2255
2255
  }, [cancel]);
2256
2256
  return {
@@ -2262,22 +2262,22 @@ function useLongPress(onLongPress, options = {}) {
2262
2262
  };
2263
2263
  }
2264
2264
  function useDragReorder(initialItems, onReorder) {
2265
- const [items, setItems] = React3.useState(initialItems);
2266
- const [dragIndex, setDragIndex] = React3.useState(-1);
2267
- const [dragOverIndex, setDragOverIndex] = React3.useState(-1);
2268
- const itemsRef = React3.useRef(initialItems);
2265
+ const [items, setItems] = React2.useState(initialItems);
2266
+ const [dragIndex, setDragIndex] = React2.useState(-1);
2267
+ const [dragOverIndex, setDragOverIndex] = React2.useState(-1);
2268
+ const itemsRef = React2.useRef(initialItems);
2269
2269
  if (initialItems !== itemsRef.current) {
2270
2270
  itemsRef.current = initialItems;
2271
2271
  setItems(initialItems);
2272
2272
  }
2273
2273
  const isDragging = dragIndex >= 0;
2274
- const handleDragStart = React3.useCallback((index) => (e) => {
2274
+ const handleDragStart = React2.useCallback((index) => (e) => {
2275
2275
  e.preventDefault();
2276
2276
  setDragIndex(index);
2277
2277
  setDragOverIndex(index);
2278
2278
  e.target.setPointerCapture?.(e.pointerId);
2279
2279
  }, []);
2280
- const handleDragMove = React3.useCallback((index) => (e) => {
2280
+ const handleDragMove = React2.useCallback((index) => (e) => {
2281
2281
  if (dragIndex < 0) return;
2282
2282
  const target = document.elementFromPoint(e.clientX, e.clientY);
2283
2283
  if (!target) return;
@@ -2292,7 +2292,7 @@ function useDragReorder(initialItems, onReorder) {
2292
2292
  }
2293
2293
  }
2294
2294
  }, [dragIndex, dragOverIndex]);
2295
- const handleDragEnd = React3.useCallback(() => {
2295
+ const handleDragEnd = React2.useCallback(() => {
2296
2296
  if (dragIndex >= 0 && dragOverIndex >= 0 && dragIndex !== dragOverIndex) {
2297
2297
  const newItems = [...items];
2298
2298
  const [movedItem] = newItems.splice(dragIndex, 1);
@@ -2303,13 +2303,13 @@ function useDragReorder(initialItems, onReorder) {
2303
2303
  setDragIndex(-1);
2304
2304
  setDragOverIndex(-1);
2305
2305
  }, [dragIndex, dragOverIndex, items, onReorder]);
2306
- const getDragHandleProps = React3.useCallback((index) => ({
2306
+ const getDragHandleProps = React2.useCallback((index) => ({
2307
2307
  onPointerDown: handleDragStart(index),
2308
2308
  style: { cursor: "grab", touchAction: "none" },
2309
2309
  "aria-grabbed": dragIndex === index,
2310
2310
  role: "button"
2311
2311
  }), [handleDragStart, dragIndex]);
2312
- const getItemProps = React3.useCallback((index) => ({
2312
+ const getItemProps = React2.useCallback((index) => ({
2313
2313
  onPointerMove: handleDragMove(index),
2314
2314
  onPointerUp: handleDragEnd,
2315
2315
  "aria-dropeffect": "move",
@@ -2331,19 +2331,19 @@ function useDragReorder(initialItems, onReorder) {
2331
2331
  }
2332
2332
  function useInfiniteScroll(onLoadMore, options = {}) {
2333
2333
  const { rootMargin = "200px", hasMore = true, isLoading = false } = options;
2334
- const observerRef = React3.useRef(null);
2335
- const callbackRef = React3.useRef(onLoadMore);
2334
+ const observerRef = React2.useRef(null);
2335
+ const callbackRef = React2.useRef(onLoadMore);
2336
2336
  callbackRef.current = onLoadMore;
2337
- const hasMoreRef = React3.useRef(hasMore);
2337
+ const hasMoreRef = React2.useRef(hasMore);
2338
2338
  hasMoreRef.current = hasMore;
2339
- const isLoadingRef = React3.useRef(isLoading);
2339
+ const isLoadingRef = React2.useRef(isLoading);
2340
2340
  isLoadingRef.current = isLoading;
2341
- React3.useEffect(() => {
2341
+ React2.useEffect(() => {
2342
2342
  return () => {
2343
2343
  observerRef.current?.disconnect();
2344
2344
  };
2345
2345
  }, []);
2346
- const sentinelRef = React3.useCallback((node) => {
2346
+ const sentinelRef = React2.useCallback((node) => {
2347
2347
  observerRef.current?.disconnect();
2348
2348
  if (!node) return;
2349
2349
  observerRef.current = new IntersectionObserver(
@@ -2361,12 +2361,12 @@ function useInfiniteScroll(onLoadMore, options = {}) {
2361
2361
  }
2362
2362
  function usePullToRefresh(onRefresh, options = {}) {
2363
2363
  const { threshold = 60, maxPull = 120 } = options;
2364
- const [pullDistance, setPullDistance] = React3.useState(0);
2365
- const [isPulling, setIsPulling] = React3.useState(false);
2366
- const [isRefreshing, setIsRefreshing] = React3.useState(false);
2367
- const startY = React3.useRef(0);
2368
- const scrollTopRef = React3.useRef(0);
2369
- const onTouchStart = React3.useCallback((e) => {
2364
+ const [pullDistance, setPullDistance] = React2.useState(0);
2365
+ const [isPulling, setIsPulling] = React2.useState(false);
2366
+ const [isRefreshing, setIsRefreshing] = React2.useState(false);
2367
+ const startY = React2.useRef(0);
2368
+ const scrollTopRef = React2.useRef(0);
2369
+ const onTouchStart = React2.useCallback((e) => {
2370
2370
  const container = e.currentTarget;
2371
2371
  scrollTopRef.current = container.scrollTop;
2372
2372
  if (scrollTopRef.current <= 0) {
@@ -2374,7 +2374,7 @@ function usePullToRefresh(onRefresh, options = {}) {
2374
2374
  setIsPulling(true);
2375
2375
  }
2376
2376
  }, []);
2377
- const onTouchMove = React3.useCallback((e) => {
2377
+ const onTouchMove = React2.useCallback((e) => {
2378
2378
  if (!isPulling || isRefreshing) return;
2379
2379
  const container = e.currentTarget;
2380
2380
  if (container.scrollTop > 0) {
@@ -2387,7 +2387,7 @@ function usePullToRefresh(onRefresh, options = {}) {
2387
2387
  setPullDistance(distance);
2388
2388
  }
2389
2389
  }, [isPulling, isRefreshing, maxPull]);
2390
- const onTouchEnd = React3.useCallback(() => {
2390
+ const onTouchEnd = React2.useCallback(() => {
2391
2391
  if (!isPulling) return;
2392
2392
  setIsPulling(false);
2393
2393
  if (pullDistance >= threshold && !isRefreshing) {
@@ -2398,7 +2398,7 @@ function usePullToRefresh(onRefresh, options = {}) {
2398
2398
  setPullDistance(0);
2399
2399
  }
2400
2400
  }, [isPulling, pullDistance, threshold, isRefreshing, onRefresh]);
2401
- const endRefresh = React3.useCallback(() => {
2401
+ const endRefresh = React2.useCallback(() => {
2402
2402
  setIsRefreshing(false);
2403
2403
  setPullDistance(0);
2404
2404
  }, []);
@@ -2426,18 +2426,18 @@ function getDistance(touches) {
2426
2426
  }
2427
2427
  function usePinchZoom(options = {}) {
2428
2428
  const { minScale = 0.5, maxScale = 4 } = options;
2429
- const [scale, setScale] = React3.useState(1);
2430
- const [isPinching, setIsPinching] = React3.useState(false);
2431
- const initialDistance = React3.useRef(0);
2432
- const initialScale = React3.useRef(1);
2433
- const onTouchStart = React3.useCallback((e) => {
2429
+ const [scale, setScale] = React2.useState(1);
2430
+ const [isPinching, setIsPinching] = React2.useState(false);
2431
+ const initialDistance = React2.useRef(0);
2432
+ const initialScale = React2.useRef(1);
2433
+ const onTouchStart = React2.useCallback((e) => {
2434
2434
  if (e.touches.length === 2) {
2435
2435
  initialDistance.current = getDistance(e.touches);
2436
2436
  initialScale.current = scale;
2437
2437
  setIsPinching(true);
2438
2438
  }
2439
2439
  }, [scale]);
2440
- const onTouchMove = React3.useCallback((e) => {
2440
+ const onTouchMove = React2.useCallback((e) => {
2441
2441
  if (e.touches.length !== 2 || !isPinching) return;
2442
2442
  e.preventDefault();
2443
2443
  const currentDistance = getDistance(e.touches);
@@ -2445,10 +2445,10 @@ function usePinchZoom(options = {}) {
2445
2445
  const newScale = Math.min(maxScale, Math.max(minScale, initialScale.current * ratio));
2446
2446
  setScale(newScale);
2447
2447
  }, [isPinching, minScale, maxScale]);
2448
- const onTouchEnd = React3.useCallback(() => {
2448
+ const onTouchEnd = React2.useCallback(() => {
2449
2449
  setIsPinching(false);
2450
2450
  }, []);
2451
- const resetZoom = React3.useCallback(() => {
2451
+ const resetZoom = React2.useCallback(() => {
2452
2452
  setScale(1);
2453
2453
  }, []);
2454
2454
  return {
@@ -2492,7 +2492,7 @@ function useGitHubStatus() {
2492
2492
  });
2493
2493
  }
2494
2494
  function useConnectGitHub() {
2495
- const connectGitHub = React3.useCallback(() => {
2495
+ const connectGitHub = React2.useCallback(() => {
2496
2496
  const userId = getUserId();
2497
2497
  const state = btoa(JSON.stringify({ userId, returnUrl: window.location.href }));
2498
2498
  window.location.href = `${API_BASE}/api/github/oauth/authorize?state=${state}`;