Dominic Elm
commited on
feat: add file tree breadcrumb (#40)
Browse files- packages/bolt/app/components/chat/CodeBlock.tsx +1 -0
- packages/bolt/app/components/workbench/EditorPanel.tsx +8 -7
- packages/bolt/app/components/workbench/FileBreadcrumb.tsx +148 -0
- packages/bolt/app/components/workbench/FileTree.tsx +58 -18
- packages/bolt/app/styles/z-index.scss +4 -0
- packages/bolt/package.json +1 -0
- pnpm-lock.yaml +643 -0
packages/bolt/app/components/chat/CodeBlock.tsx
CHANGED
@@ -2,6 +2,7 @@ import { memo, useEffect, useState } from 'react';
|
|
2 |
import { bundledLanguages, codeToHtml, isSpecialLang, type BundledLanguage, type SpecialLanguage } from 'shiki';
|
3 |
import { classNames } from '~/utils/classNames';
|
4 |
import { createScopedLogger } from '~/utils/logger';
|
|
|
5 |
import styles from './CodeBlock.module.scss';
|
6 |
|
7 |
const logger = createScopedLogger('CodeBlock');
|
|
|
2 |
import { bundledLanguages, codeToHtml, isSpecialLang, type BundledLanguage, type SpecialLanguage } from 'shiki';
|
3 |
import { classNames } from '~/utils/classNames';
|
4 |
import { createScopedLogger } from '~/utils/logger';
|
5 |
+
|
6 |
import styles from './CodeBlock.module.scss';
|
7 |
|
8 |
const logger = createScopedLogger('CodeBlock');
|
packages/bolt/app/components/workbench/EditorPanel.tsx
CHANGED
@@ -20,6 +20,7 @@ import { classNames } from '~/utils/classNames';
|
|
20 |
import { WORK_DIR } from '~/utils/constants';
|
21 |
import { renderLogger } from '~/utils/logger';
|
22 |
import { isMobile } from '~/utils/mobile';
|
|
|
23 |
import { FileTree } from './FileTree';
|
24 |
import { Terminal, type TerminalRef } from './terminal/Terminal';
|
25 |
|
@@ -67,12 +68,12 @@ export const EditorPanel = memo(
|
|
67 |
const [activeTerminal, setActiveTerminal] = useState(0);
|
68 |
const [terminalCount, setTerminalCount] = useState(1);
|
69 |
|
70 |
-
const
|
71 |
if (!editorDocument) {
|
72 |
-
return
|
73 |
}
|
74 |
|
75 |
-
return editorDocument.filePath.split('/')
|
76 |
}, [editorDocument]);
|
77 |
|
78 |
const activeFileUnsaved = useMemo(() => {
|
@@ -134,6 +135,7 @@ export const EditorPanel = memo(
|
|
134 |
<FileTree
|
135 |
className="h-full"
|
136 |
files={files}
|
|
|
137 |
unsavedFiles={unsavedFiles}
|
138 |
rootFolder={WORK_DIR}
|
139 |
selectedFile={selectedFile}
|
@@ -143,11 +145,10 @@ export const EditorPanel = memo(
|
|
143 |
</Panel>
|
144 |
<PanelResizeHandle />
|
145 |
<Panel className="flex flex-col" defaultSize={80} minSize={20}>
|
146 |
-
<PanelHeader>
|
147 |
-
{
|
148 |
<div className="flex items-center flex-1 text-sm">
|
149 |
-
<
|
150 |
-
{activeFile}
|
151 |
{activeFileUnsaved && (
|
152 |
<div className="flex gap-1 ml-auto -mr-1.5">
|
153 |
<PanelHeaderButton onClick={onFileSave}>
|
|
|
20 |
import { WORK_DIR } from '~/utils/constants';
|
21 |
import { renderLogger } from '~/utils/logger';
|
22 |
import { isMobile } from '~/utils/mobile';
|
23 |
+
import { FileBreadcrumb } from './FileBreadcrumb';
|
24 |
import { FileTree } from './FileTree';
|
25 |
import { Terminal, type TerminalRef } from './terminal/Terminal';
|
26 |
|
|
|
68 |
const [activeTerminal, setActiveTerminal] = useState(0);
|
69 |
const [terminalCount, setTerminalCount] = useState(1);
|
70 |
|
71 |
+
const activeFileSegments = useMemo(() => {
|
72 |
if (!editorDocument) {
|
73 |
+
return undefined;
|
74 |
}
|
75 |
|
76 |
+
return editorDocument.filePath.split('/');
|
77 |
}, [editorDocument]);
|
78 |
|
79 |
const activeFileUnsaved = useMemo(() => {
|
|
|
135 |
<FileTree
|
136 |
className="h-full"
|
137 |
files={files}
|
138 |
+
hideRoot
|
139 |
unsavedFiles={unsavedFiles}
|
140 |
rootFolder={WORK_DIR}
|
141 |
selectedFile={selectedFile}
|
|
|
145 |
</Panel>
|
146 |
<PanelResizeHandle />
|
147 |
<Panel className="flex flex-col" defaultSize={80} minSize={20}>
|
148 |
+
<PanelHeader className="overflow-x-auto">
|
149 |
+
{activeFileSegments?.length && (
|
150 |
<div className="flex items-center flex-1 text-sm">
|
151 |
+
<FileBreadcrumb pathSegments={activeFileSegments} files={files} onFileSelect={onFileSelect} />
|
|
|
152 |
{activeFileUnsaved && (
|
153 |
<div className="flex gap-1 ml-auto -mr-1.5">
|
154 |
<PanelHeaderButton onClick={onFileSave}>
|
packages/bolt/app/components/workbench/FileBreadcrumb.tsx
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
|
2 |
+
import { AnimatePresence, motion, type Variants } from 'framer-motion';
|
3 |
+
import { memo, useEffect, useRef, useState } from 'react';
|
4 |
+
import type { FileMap } from '~/lib/stores/files';
|
5 |
+
import { classNames } from '~/utils/classNames';
|
6 |
+
import { WORK_DIR } from '~/utils/constants';
|
7 |
+
import { cubicEasingFn } from '~/utils/easings';
|
8 |
+
import { renderLogger } from '~/utils/logger';
|
9 |
+
import FileTree from './FileTree';
|
10 |
+
|
11 |
+
const WORK_DIR_REGEX = new RegExp(`^${WORK_DIR.split('/').slice(0, -1).join('/').replaceAll('/', '\\/')}/`);
|
12 |
+
|
13 |
+
interface FileBreadcrumbProps {
|
14 |
+
files?: FileMap;
|
15 |
+
pathSegments?: string[];
|
16 |
+
onFileSelect?: (filePath: string) => void;
|
17 |
+
}
|
18 |
+
|
19 |
+
const contextMenuVariants = {
|
20 |
+
open: {
|
21 |
+
y: 0,
|
22 |
+
opacity: 1,
|
23 |
+
transition: {
|
24 |
+
duration: 0.15,
|
25 |
+
ease: cubicEasingFn,
|
26 |
+
},
|
27 |
+
},
|
28 |
+
close: {
|
29 |
+
y: 6,
|
30 |
+
opacity: 0,
|
31 |
+
transition: {
|
32 |
+
duration: 0.15,
|
33 |
+
ease: cubicEasingFn,
|
34 |
+
},
|
35 |
+
},
|
36 |
+
} satisfies Variants;
|
37 |
+
|
38 |
+
export const FileBreadcrumb = memo<FileBreadcrumbProps>(({ files, pathSegments = [], onFileSelect }) => {
|
39 |
+
renderLogger.trace('FileBreadcrumb');
|
40 |
+
|
41 |
+
const [activeIndex, setActiveIndex] = useState<number | null>(null);
|
42 |
+
|
43 |
+
const contextMenuRef = useRef<HTMLDivElement | null>(null);
|
44 |
+
const segmentRefs = useRef<(HTMLSpanElement | null)[]>([]);
|
45 |
+
|
46 |
+
const handleSegmentClick = (index: number) => {
|
47 |
+
setActiveIndex((prevIndex) => (prevIndex === index ? null : index));
|
48 |
+
};
|
49 |
+
|
50 |
+
useEffect(() => {
|
51 |
+
const handleOutsideClick = (event: MouseEvent) => {
|
52 |
+
if (
|
53 |
+
activeIndex !== null &&
|
54 |
+
!contextMenuRef.current?.contains(event.target as Node) &&
|
55 |
+
!segmentRefs.current.some((ref) => ref?.contains(event.target as Node))
|
56 |
+
) {
|
57 |
+
setActiveIndex(null);
|
58 |
+
}
|
59 |
+
};
|
60 |
+
|
61 |
+
document.addEventListener('mousedown', handleOutsideClick);
|
62 |
+
|
63 |
+
return () => {
|
64 |
+
document.removeEventListener('mousedown', handleOutsideClick);
|
65 |
+
};
|
66 |
+
}, [activeIndex]);
|
67 |
+
|
68 |
+
if (files === undefined || pathSegments.length === 0) {
|
69 |
+
return null;
|
70 |
+
}
|
71 |
+
|
72 |
+
return (
|
73 |
+
<div className="flex">
|
74 |
+
{pathSegments.map((segment, index) => {
|
75 |
+
const isLast = index === pathSegments.length - 1;
|
76 |
+
|
77 |
+
const path = pathSegments.slice(0, index).join('/');
|
78 |
+
|
79 |
+
if (!WORK_DIR_REGEX.test(path)) {
|
80 |
+
return null;
|
81 |
+
}
|
82 |
+
|
83 |
+
const isActive = activeIndex === index;
|
84 |
+
|
85 |
+
return (
|
86 |
+
<div key={index} className="relative flex items-center">
|
87 |
+
<DropdownMenu.Root open={isActive} modal={false}>
|
88 |
+
<DropdownMenu.Trigger asChild>
|
89 |
+
<span
|
90 |
+
ref={(ref) => (segmentRefs.current[index] = ref)}
|
91 |
+
className={classNames('flex items-center gap-1.5 cursor-pointer shrink-0', {
|
92 |
+
'text-bolt-elements-textTertiary hover:text-bolt-elements-textPrimary': !isActive,
|
93 |
+
'text-bolt-elements-textPrimary underline': isActive,
|
94 |
+
'pr-4': isLast,
|
95 |
+
})}
|
96 |
+
onClick={() => handleSegmentClick(index)}
|
97 |
+
>
|
98 |
+
{isLast && <div className="i-ph:file-duotone" />}
|
99 |
+
{segment}
|
100 |
+
</span>
|
101 |
+
</DropdownMenu.Trigger>
|
102 |
+
{index > 0 && !isLast && <span className="i-ph:caret-right inline-block mx-1" />}
|
103 |
+
<AnimatePresence>
|
104 |
+
{isActive && (
|
105 |
+
<DropdownMenu.Portal>
|
106 |
+
<DropdownMenu.Content
|
107 |
+
className="z-file-tree-breadcrumb"
|
108 |
+
asChild
|
109 |
+
align="start"
|
110 |
+
side="bottom"
|
111 |
+
avoidCollisions={false}
|
112 |
+
>
|
113 |
+
<motion.div
|
114 |
+
ref={contextMenuRef}
|
115 |
+
initial="close"
|
116 |
+
animate="open"
|
117 |
+
exit="close"
|
118 |
+
variants={contextMenuVariants}
|
119 |
+
>
|
120 |
+
<div className="rounded-lg overflow-hidden">
|
121 |
+
<div className="max-h-[50vh] min-w-[300px] overflow-scroll bg-bolt-elements-background-depth-1 border border-bolt-elements-borderColor shadow-sm rounded-lg">
|
122 |
+
<FileTree
|
123 |
+
files={files}
|
124 |
+
hideRoot
|
125 |
+
rootFolder={path}
|
126 |
+
collapsed
|
127 |
+
allowFolderSelection
|
128 |
+
selectedFile={`${path}/${segment}`}
|
129 |
+
onFileSelect={(filePath) => {
|
130 |
+
setActiveIndex(null);
|
131 |
+
onFileSelect?.(filePath);
|
132 |
+
}}
|
133 |
+
/>
|
134 |
+
</div>
|
135 |
+
</div>
|
136 |
+
<DropdownMenu.Arrow className="fill-bolt-elements-borderColor" />
|
137 |
+
</motion.div>
|
138 |
+
</DropdownMenu.Content>
|
139 |
+
</DropdownMenu.Portal>
|
140 |
+
)}
|
141 |
+
</AnimatePresence>
|
142 |
+
</DropdownMenu.Root>
|
143 |
+
</div>
|
144 |
+
);
|
145 |
+
})}
|
146 |
+
</div>
|
147 |
+
);
|
148 |
+
});
|
packages/bolt/app/components/workbench/FileTree.tsx
CHANGED
@@ -13,24 +13,47 @@ interface Props {
|
|
13 |
selectedFile?: string;
|
14 |
onFileSelect?: (filePath: string) => void;
|
15 |
rootFolder?: string;
|
|
|
|
|
|
|
16 |
hiddenFiles?: Array<string | RegExp>;
|
17 |
unsavedFiles?: Set<string>;
|
18 |
className?: string;
|
19 |
}
|
20 |
|
21 |
export const FileTree = memo(
|
22 |
-
({
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
renderLogger.trace('FileTree');
|
24 |
|
25 |
const computedHiddenFiles = useMemo(() => [...DEFAULT_HIDDEN_FILES, ...(hiddenFiles ?? [])], [hiddenFiles]);
|
26 |
|
27 |
const fileList = useMemo(() => {
|
28 |
-
return buildFileList(files, rootFolder, computedHiddenFiles);
|
29 |
-
}, [files, rootFolder, computedHiddenFiles]);
|
30 |
|
31 |
-
const [collapsedFolders, setCollapsedFolders] = useState(() =>
|
|
|
|
|
|
|
|
|
32 |
|
33 |
useEffect(() => {
|
|
|
|
|
|
|
|
|
|
|
34 |
setCollapsedFolders((prevCollapsed) => {
|
35 |
const newCollapsed = new Set<string>();
|
36 |
|
@@ -42,7 +65,7 @@ export const FileTree = memo(
|
|
42 |
|
43 |
return newCollapsed;
|
44 |
});
|
45 |
-
}, [fileList]);
|
46 |
|
47 |
const filteredFileList = useMemo(() => {
|
48 |
const list = [];
|
@@ -109,6 +132,7 @@ export const FileTree = memo(
|
|
109 |
<Folder
|
110 |
key={fileOrFolder.id}
|
111 |
folder={fileOrFolder}
|
|
|
112 |
collapsed={collapsedFolders.has(fileOrFolder.fullPath)}
|
113 |
onClick={() => {
|
114 |
toggleCollapseState(fileOrFolder.fullPath);
|
@@ -131,13 +155,18 @@ export default FileTree;
|
|
131 |
interface FolderProps {
|
132 |
folder: FolderNode;
|
133 |
collapsed: boolean;
|
|
|
134 |
onClick: () => void;
|
135 |
}
|
136 |
|
137 |
-
function Folder({ folder: { depth, name }, collapsed, onClick }: FolderProps) {
|
138 |
return (
|
139 |
<NodeButton
|
140 |
-
className=
|
|
|
|
|
|
|
|
|
141 |
depth={depth}
|
142 |
iconClasses={classNames({
|
143 |
'i-ph:caret-right scale-98': collapsed,
|
@@ -223,13 +252,18 @@ interface FolderNode extends BaseNode {
|
|
223 |
kind: 'folder';
|
224 |
}
|
225 |
|
226 |
-
function buildFileList(
|
|
|
|
|
|
|
|
|
|
|
227 |
const folderPaths = new Set<string>();
|
228 |
const fileList: Node[] = [];
|
229 |
|
230 |
let defaultDepth = 0;
|
231 |
|
232 |
-
if (rootFolder === '/') {
|
233 |
defaultDepth = 1;
|
234 |
fileList.push({ kind: 'folder', name: '/', depth: 0, id: 0, fullPath: '/' });
|
235 |
}
|
@@ -251,7 +285,7 @@ function buildFileList(files: FileMap, rootFolder = '/', hiddenFiles: Array<stri
|
|
251 |
const name = segments[i];
|
252 |
const fullPath = (currentPath += `/${name}`);
|
253 |
|
254 |
-
if (!fullPath.startsWith(rootFolder)) {
|
255 |
i++;
|
256 |
continue;
|
257 |
}
|
@@ -281,7 +315,7 @@ function buildFileList(files: FileMap, rootFolder = '/', hiddenFiles: Array<stri
|
|
281 |
}
|
282 |
}
|
283 |
|
284 |
-
return sortFileList(rootFolder, fileList);
|
285 |
}
|
286 |
|
287 |
function isHiddenFile(filePath: string, fileName: string, hiddenFiles: Array<string | RegExp>) {
|
@@ -307,7 +341,7 @@ function isHiddenFile(filePath: string, fileName: string, hiddenFiles: Array<str
|
|
307 |
*
|
308 |
* @returns A new array of nodes sorted in depth-first order.
|
309 |
*/
|
310 |
-
function sortFileList(rootFolder: string, nodeList: Node[]): Node[] {
|
311 |
logger.trace('sortFileList');
|
312 |
|
313 |
const nodeMap = new Map<string, Node>();
|
@@ -335,13 +369,10 @@ function sortFileList(rootFolder: string, nodeList: Node[]): Node[] {
|
|
335 |
const depthFirstTraversal = (path: string): void => {
|
336 |
const node = nodeMap.get(path);
|
337 |
|
338 |
-
if (
|
339 |
-
|
340 |
-
return;
|
341 |
}
|
342 |
|
343 |
-
sortedList.push(node);
|
344 |
-
|
345 |
const children = childrenMap.get(path);
|
346 |
|
347 |
if (children) {
|
@@ -355,7 +386,16 @@ function sortFileList(rootFolder: string, nodeList: Node[]): Node[] {
|
|
355 |
}
|
356 |
};
|
357 |
|
358 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
|
360 |
return sortedList;
|
361 |
}
|
|
|
13 |
selectedFile?: string;
|
14 |
onFileSelect?: (filePath: string) => void;
|
15 |
rootFolder?: string;
|
16 |
+
hideRoot?: boolean;
|
17 |
+
collapsed?: boolean;
|
18 |
+
allowFolderSelection?: boolean;
|
19 |
hiddenFiles?: Array<string | RegExp>;
|
20 |
unsavedFiles?: Set<string>;
|
21 |
className?: string;
|
22 |
}
|
23 |
|
24 |
export const FileTree = memo(
|
25 |
+
({
|
26 |
+
files = {},
|
27 |
+
onFileSelect,
|
28 |
+
selectedFile,
|
29 |
+
rootFolder,
|
30 |
+
hideRoot = false,
|
31 |
+
collapsed = false,
|
32 |
+
allowFolderSelection = false,
|
33 |
+
hiddenFiles,
|
34 |
+
className,
|
35 |
+
unsavedFiles,
|
36 |
+
}: Props) => {
|
37 |
renderLogger.trace('FileTree');
|
38 |
|
39 |
const computedHiddenFiles = useMemo(() => [...DEFAULT_HIDDEN_FILES, ...(hiddenFiles ?? [])], [hiddenFiles]);
|
40 |
|
41 |
const fileList = useMemo(() => {
|
42 |
+
return buildFileList(files, rootFolder, hideRoot, computedHiddenFiles);
|
43 |
+
}, [files, rootFolder, hideRoot, computedHiddenFiles]);
|
44 |
|
45 |
+
const [collapsedFolders, setCollapsedFolders] = useState(() => {
|
46 |
+
return collapsed
|
47 |
+
? new Set(fileList.filter((item) => item.kind === 'folder').map((item) => item.fullPath))
|
48 |
+
: new Set<string>();
|
49 |
+
});
|
50 |
|
51 |
useEffect(() => {
|
52 |
+
if (collapsed) {
|
53 |
+
setCollapsedFolders(new Set(fileList.filter((item) => item.kind === 'folder').map((item) => item.fullPath)));
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
setCollapsedFolders((prevCollapsed) => {
|
58 |
const newCollapsed = new Set<string>();
|
59 |
|
|
|
65 |
|
66 |
return newCollapsed;
|
67 |
});
|
68 |
+
}, [fileList, collapsed]);
|
69 |
|
70 |
const filteredFileList = useMemo(() => {
|
71 |
const list = [];
|
|
|
132 |
<Folder
|
133 |
key={fileOrFolder.id}
|
134 |
folder={fileOrFolder}
|
135 |
+
selected={allowFolderSelection && selectedFile === fileOrFolder.fullPath}
|
136 |
collapsed={collapsedFolders.has(fileOrFolder.fullPath)}
|
137 |
onClick={() => {
|
138 |
toggleCollapseState(fileOrFolder.fullPath);
|
|
|
155 |
interface FolderProps {
|
156 |
folder: FolderNode;
|
157 |
collapsed: boolean;
|
158 |
+
selected?: boolean;
|
159 |
onClick: () => void;
|
160 |
}
|
161 |
|
162 |
+
function Folder({ folder: { depth, name }, collapsed, selected = false, onClick }: FolderProps) {
|
163 |
return (
|
164 |
<NodeButton
|
165 |
+
className={classNames('group', {
|
166 |
+
'bg-transparent text-bolt-elements-item-contentDefault hover:text-bolt-elements-item-contentActive hover:bg-bolt-elements-item-backgroundActive':
|
167 |
+
!selected,
|
168 |
+
'bg-bolt-elements-item-backgroundAccent text-bolt-elements-item-contentAccent': selected,
|
169 |
+
})}
|
170 |
depth={depth}
|
171 |
iconClasses={classNames({
|
172 |
'i-ph:caret-right scale-98': collapsed,
|
|
|
252 |
kind: 'folder';
|
253 |
}
|
254 |
|
255 |
+
function buildFileList(
|
256 |
+
files: FileMap,
|
257 |
+
rootFolder = '/',
|
258 |
+
hideRoot: boolean,
|
259 |
+
hiddenFiles: Array<string | RegExp>,
|
260 |
+
): Node[] {
|
261 |
const folderPaths = new Set<string>();
|
262 |
const fileList: Node[] = [];
|
263 |
|
264 |
let defaultDepth = 0;
|
265 |
|
266 |
+
if (rootFolder === '/' && !hideRoot) {
|
267 |
defaultDepth = 1;
|
268 |
fileList.push({ kind: 'folder', name: '/', depth: 0, id: 0, fullPath: '/' });
|
269 |
}
|
|
|
285 |
const name = segments[i];
|
286 |
const fullPath = (currentPath += `/${name}`);
|
287 |
|
288 |
+
if (!fullPath.startsWith(rootFolder) || (hideRoot && fullPath === rootFolder)) {
|
289 |
i++;
|
290 |
continue;
|
291 |
}
|
|
|
315 |
}
|
316 |
}
|
317 |
|
318 |
+
return sortFileList(rootFolder, fileList, hideRoot);
|
319 |
}
|
320 |
|
321 |
function isHiddenFile(filePath: string, fileName: string, hiddenFiles: Array<string | RegExp>) {
|
|
|
341 |
*
|
342 |
* @returns A new array of nodes sorted in depth-first order.
|
343 |
*/
|
344 |
+
function sortFileList(rootFolder: string, nodeList: Node[], hideRoot: boolean): Node[] {
|
345 |
logger.trace('sortFileList');
|
346 |
|
347 |
const nodeMap = new Map<string, Node>();
|
|
|
369 |
const depthFirstTraversal = (path: string): void => {
|
370 |
const node = nodeMap.get(path);
|
371 |
|
372 |
+
if (node) {
|
373 |
+
sortedList.push(node);
|
|
|
374 |
}
|
375 |
|
|
|
|
|
376 |
const children = childrenMap.get(path);
|
377 |
|
378 |
if (children) {
|
|
|
386 |
}
|
387 |
};
|
388 |
|
389 |
+
if (hideRoot) {
|
390 |
+
// if root is hidden, start traversal from its immediate children
|
391 |
+
const rootChildren = childrenMap.get(rootFolder) || [];
|
392 |
+
|
393 |
+
for (const child of rootChildren) {
|
394 |
+
depthFirstTraversal(child.fullPath);
|
395 |
+
}
|
396 |
+
} else {
|
397 |
+
depthFirstTraversal(rootFolder);
|
398 |
+
}
|
399 |
|
400 |
return sortedList;
|
401 |
}
|
packages/bolt/app/styles/z-index.scss
CHANGED
@@ -24,6 +24,10 @@ $zIndexMax: 999;
|
|
24 |
z-index: 3;
|
25 |
}
|
26 |
|
|
|
|
|
|
|
|
|
27 |
.z-max {
|
28 |
z-index: $zIndexMax;
|
29 |
}
|
|
|
24 |
z-index: 3;
|
25 |
}
|
26 |
|
27 |
+
.z-file-tree-breadcrumb {
|
28 |
+
z-index: $zIndexMax - 1;
|
29 |
+
}
|
30 |
+
|
31 |
.z-max {
|
32 |
z-index: $zIndexMax;
|
33 |
}
|
packages/bolt/package.json
CHANGED
@@ -36,6 +36,7 @@
|
|
36 |
"@iconify-json/svg-spinners": "^1.1.2",
|
37 |
"@lezer/highlight": "^1.2.0",
|
38 |
"@nanostores/react": "^0.7.2",
|
|
|
39 |
"@remix-run/cloudflare": "^2.10.2",
|
40 |
"@remix-run/cloudflare-pages": "^2.10.2",
|
41 |
"@remix-run/react": "^2.10.2",
|
|
|
36 |
"@iconify-json/svg-spinners": "^1.1.2",
|
37 |
"@lezer/highlight": "^1.2.0",
|
38 |
"@nanostores/react": "^0.7.2",
|
39 |
+
"@radix-ui/react-dropdown-menu": "^2.1.1",
|
40 |
"@remix-run/cloudflare": "^2.10.2",
|
41 |
"@remix-run/cloudflare-pages": "^2.10.2",
|
42 |
"@remix-run/react": "^2.10.2",
|
pnpm-lock.yaml
CHANGED
@@ -95,6 +95,9 @@ importers:
|
|
95 |
'@nanostores/react':
|
96 |
specifier: ^0.7.2
|
97 |
version: 0.7.2([email protected])([email protected])
|
|
|
|
|
|
|
98 |
'@remix-run/cloudflare':
|
99 |
specifier: ^2.10.2
|
100 |
version: 2.10.2(@cloudflare/[email protected])([email protected])
|
@@ -1085,6 +1088,21 @@ packages:
|
|
1085 |
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
|
1086 |
engines: {node: '>=14'}
|
1087 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1088 |
'@humanwhocodes/[email protected]':
|
1089 |
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
|
1090 |
engines: {node: '>=12.22'}
|
@@ -1231,6 +1249,263 @@ packages:
|
|
1231 |
'@polka/[email protected]':
|
1232 |
resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
|
1233 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1234 |
'@remix-run/[email protected]':
|
1235 |
resolution: {integrity: sha512-HaOdGkSMhe4zg1M8KDNNKb7VgBIHGpi0/90aLdYmzvZy+yeR0NOdrQh4P6gAYGCGSzqttuPOEIr4laXtBKI7Yg==}
|
1236 |
engines: {node: '>=18.0.0'}
|
@@ -1883,6 +2158,10 @@ packages:
|
|
1883 | |
1884 |
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
1885 |
|
|
|
|
|
|
|
|
|
1886 | |
1887 |
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
|
1888 |
|
@@ -2372,6 +2651,9 @@ packages:
|
|
2372 |
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
|
2373 |
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
2374 |
|
|
|
|
|
|
|
2375 | |
2376 |
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
2377 |
|
@@ -2789,6 +3071,10 @@ packages:
|
|
2789 |
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
|
2790 |
engines: {node: '>= 0.4'}
|
2791 |
|
|
|
|
|
|
|
|
|
2792 | |
2793 |
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
|
2794 |
engines: {node: '>=8'}
|
@@ -3011,6 +3297,9 @@ packages:
|
|
3011 | |
3012 |
resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
|
3013 |
|
|
|
|
|
|
|
3014 | |
3015 |
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
|
3016 |
engines: {node: '>= 0.10'}
|
@@ -4205,6 +4494,26 @@ packages:
|
|
4205 |
resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
|
4206 |
engines: {node: '>=0.10.0'}
|
4207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4208 | |
4209 |
resolution: {integrity: sha512-aMbK3VF8U+VBICG+rwhE0Rr/eFZaRzmNq3akBRL1TrayIpLXz7Rbok0//kYeWj6SQRsjcQ3f4eRplJicM+oL6w==}
|
4210 |
peerDependencies:
|
@@ -4224,6 +4533,16 @@ packages:
|
|
4224 |
peerDependencies:
|
4225 |
react: '>=16.8'
|
4226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4227 | |
4228 |
resolution: {integrity: sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==}
|
4229 |
peerDependencies:
|
@@ -4874,6 +5193,26 @@ packages:
|
|
4874 | |
4875 |
resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
|
4876 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4877 | |
4878 |
resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
|
4879 |
peerDependencies:
|
@@ -5999,6 +6338,23 @@ snapshots:
|
|
5999 |
|
6000 |
'@fastify/[email protected]': {}
|
6001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6002 |
'@humanwhocodes/[email protected]': {}
|
6003 |
|
6004 |
'@humanwhocodes/[email protected]': {}
|
@@ -6206,6 +6562,238 @@ snapshots:
|
|
6206 |
|
6207 |
'@polka/[email protected]': {}
|
6208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6209 |
'@remix-run/[email protected](@cloudflare/[email protected])([email protected])':
|
6210 |
dependencies:
|
6211 |
'@cloudflare/workers-types': 4.20240620.0
|
@@ -7092,6 +7680,10 @@ snapshots:
|
|
7092 |
|
7093 | |
7094 |
|
|
|
|
|
|
|
|
|
7095 | |
7096 |
dependencies:
|
7097 |
dequal: 2.0.3
|
@@ -7621,6 +8213,8 @@ snapshots:
|
|
7621 |
|
7622 | |
7623 |
|
|
|
|
|
7624 | |
7625 |
dependencies:
|
7626 |
dequal: 2.0.3
|
@@ -8156,6 +8750,8 @@ snapshots:
|
|
8156 |
has-symbols: 1.0.3
|
8157 |
hasown: 2.0.2
|
8158 |
|
|
|
|
|
8159 | |
8160 |
|
8161 | |
@@ -8429,6 +9025,10 @@ snapshots:
|
|
8429 |
|
8430 | |
8431 |
|
|
|
|
|
|
|
|
|
8432 | |
8433 |
|
8434 | |
@@ -9978,6 +10578,25 @@ snapshots:
|
|
9978 |
|
9979 | |
9980 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9981 | |
9982 |
dependencies:
|
9983 |
react: 18.3.1
|
@@ -9995,6 +10614,15 @@ snapshots:
|
|
9995 |
'@remix-run/router': 1.17.1
|
9996 |
react: 18.3.1
|
9997 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9998 | |
9999 |
dependencies:
|
10000 |
clsx: 2.1.1
|
@@ -10742,6 +11370,21 @@ snapshots:
|
|
10742 |
punycode: 1.4.1
|
10743 |
qs: 6.12.3
|
10744 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10745 | |
10746 |
dependencies:
|
10747 |
react: 18.3.1
|
|
|
95 |
'@nanostores/react':
|
96 |
specifier: ^0.7.2
|
97 |
version: 0.7.2([email protected])([email protected])
|
98 |
+
'@radix-ui/react-dropdown-menu':
|
99 |
+
specifier: ^2.1.1
|
100 |
+
version: 2.1.1(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
101 |
'@remix-run/cloudflare':
|
102 |
specifier: ^2.10.2
|
103 |
version: 2.10.2(@cloudflare/[email protected])([email protected])
|
|
|
1088 |
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
|
1089 |
engines: {node: '>=14'}
|
1090 |
|
1091 |
+
'@floating-ui/[email protected]':
|
1092 |
+
resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==}
|
1093 |
+
|
1094 |
+
'@floating-ui/[email protected]':
|
1095 |
+
resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==}
|
1096 |
+
|
1097 |
+
'@floating-ui/[email protected]':
|
1098 |
+
resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==}
|
1099 |
+
peerDependencies:
|
1100 |
+
react: '>=16.8.0'
|
1101 |
+
react-dom: '>=16.8.0'
|
1102 |
+
|
1103 |
+
'@floating-ui/[email protected]':
|
1104 |
+
resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==}
|
1105 |
+
|
1106 |
'@humanwhocodes/[email protected]':
|
1107 |
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
|
1108 |
engines: {node: '>=12.22'}
|
|
|
1249 |
'@polka/[email protected]':
|
1250 |
resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
|
1251 |
|
1252 |
+
'@radix-ui/[email protected]':
|
1253 |
+
resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
|
1254 |
+
|
1255 |
+
'@radix-ui/[email protected]':
|
1256 |
+
resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==}
|
1257 |
+
peerDependencies:
|
1258 |
+
'@types/react': '*'
|
1259 |
+
'@types/react-dom': '*'
|
1260 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1261 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1262 |
+
peerDependenciesMeta:
|
1263 |
+
'@types/react':
|
1264 |
+
optional: true
|
1265 |
+
'@types/react-dom':
|
1266 |
+
optional: true
|
1267 |
+
|
1268 |
+
'@radix-ui/[email protected]':
|
1269 |
+
resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
|
1270 |
+
peerDependencies:
|
1271 |
+
'@types/react': '*'
|
1272 |
+
'@types/react-dom': '*'
|
1273 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1274 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1275 |
+
peerDependenciesMeta:
|
1276 |
+
'@types/react':
|
1277 |
+
optional: true
|
1278 |
+
'@types/react-dom':
|
1279 |
+
optional: true
|
1280 |
+
|
1281 |
+
'@radix-ui/[email protected]':
|
1282 |
+
resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
|
1283 |
+
peerDependencies:
|
1284 |
+
'@types/react': '*'
|
1285 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1286 |
+
peerDependenciesMeta:
|
1287 |
+
'@types/react':
|
1288 |
+
optional: true
|
1289 |
+
|
1290 |
+
'@radix-ui/[email protected]':
|
1291 |
+
resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
|
1292 |
+
peerDependencies:
|
1293 |
+
'@types/react': '*'
|
1294 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1295 |
+
peerDependenciesMeta:
|
1296 |
+
'@types/react':
|
1297 |
+
optional: true
|
1298 |
+
|
1299 |
+
'@radix-ui/[email protected]':
|
1300 |
+
resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
|
1301 |
+
peerDependencies:
|
1302 |
+
'@types/react': '*'
|
1303 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1304 |
+
peerDependenciesMeta:
|
1305 |
+
'@types/react':
|
1306 |
+
optional: true
|
1307 |
+
|
1308 |
+
'@radix-ui/[email protected]':
|
1309 |
+
resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
|
1310 |
+
peerDependencies:
|
1311 |
+
'@types/react': '*'
|
1312 |
+
'@types/react-dom': '*'
|
1313 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1314 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1315 |
+
peerDependenciesMeta:
|
1316 |
+
'@types/react':
|
1317 |
+
optional: true
|
1318 |
+
'@types/react-dom':
|
1319 |
+
optional: true
|
1320 |
+
|
1321 |
+
'@radix-ui/[email protected]':
|
1322 |
+
resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==}
|
1323 |
+
peerDependencies:
|
1324 |
+
'@types/react': '*'
|
1325 |
+
'@types/react-dom': '*'
|
1326 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1327 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1328 |
+
peerDependenciesMeta:
|
1329 |
+
'@types/react':
|
1330 |
+
optional: true
|
1331 |
+
'@types/react-dom':
|
1332 |
+
optional: true
|
1333 |
+
|
1334 |
+
'@radix-ui/[email protected]':
|
1335 |
+
resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
|
1336 |
+
peerDependencies:
|
1337 |
+
'@types/react': '*'
|
1338 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1339 |
+
peerDependenciesMeta:
|
1340 |
+
'@types/react':
|
1341 |
+
optional: true
|
1342 |
+
|
1343 |
+
'@radix-ui/[email protected]':
|
1344 |
+
resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
|
1345 |
+
peerDependencies:
|
1346 |
+
'@types/react': '*'
|
1347 |
+
'@types/react-dom': '*'
|
1348 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1349 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1350 |
+
peerDependenciesMeta:
|
1351 |
+
'@types/react':
|
1352 |
+
optional: true
|
1353 |
+
'@types/react-dom':
|
1354 |
+
optional: true
|
1355 |
+
|
1356 |
+
'@radix-ui/[email protected]':
|
1357 |
+
resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
|
1358 |
+
peerDependencies:
|
1359 |
+
'@types/react': '*'
|
1360 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1361 |
+
peerDependenciesMeta:
|
1362 |
+
'@types/react':
|
1363 |
+
optional: true
|
1364 |
+
|
1365 |
+
'@radix-ui/[email protected]':
|
1366 |
+
resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==}
|
1367 |
+
peerDependencies:
|
1368 |
+
'@types/react': '*'
|
1369 |
+
'@types/react-dom': '*'
|
1370 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1371 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1372 |
+
peerDependenciesMeta:
|
1373 |
+
'@types/react':
|
1374 |
+
optional: true
|
1375 |
+
'@types/react-dom':
|
1376 |
+
optional: true
|
1377 |
+
|
1378 |
+
'@radix-ui/[email protected]':
|
1379 |
+
resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==}
|
1380 |
+
peerDependencies:
|
1381 |
+
'@types/react': '*'
|
1382 |
+
'@types/react-dom': '*'
|
1383 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1384 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1385 |
+
peerDependenciesMeta:
|
1386 |
+
'@types/react':
|
1387 |
+
optional: true
|
1388 |
+
'@types/react-dom':
|
1389 |
+
optional: true
|
1390 |
+
|
1391 |
+
'@radix-ui/[email protected]':
|
1392 |
+
resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
|
1393 |
+
peerDependencies:
|
1394 |
+
'@types/react': '*'
|
1395 |
+
'@types/react-dom': '*'
|
1396 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1397 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1398 |
+
peerDependenciesMeta:
|
1399 |
+
'@types/react':
|
1400 |
+
optional: true
|
1401 |
+
'@types/react-dom':
|
1402 |
+
optional: true
|
1403 |
+
|
1404 |
+
'@radix-ui/[email protected]':
|
1405 |
+
resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
|
1406 |
+
peerDependencies:
|
1407 |
+
'@types/react': '*'
|
1408 |
+
'@types/react-dom': '*'
|
1409 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1410 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1411 |
+
peerDependenciesMeta:
|
1412 |
+
'@types/react':
|
1413 |
+
optional: true
|
1414 |
+
'@types/react-dom':
|
1415 |
+
optional: true
|
1416 |
+
|
1417 |
+
'@radix-ui/[email protected]':
|
1418 |
+
resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
|
1419 |
+
peerDependencies:
|
1420 |
+
'@types/react': '*'
|
1421 |
+
'@types/react-dom': '*'
|
1422 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1423 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1424 |
+
peerDependenciesMeta:
|
1425 |
+
'@types/react':
|
1426 |
+
optional: true
|
1427 |
+
'@types/react-dom':
|
1428 |
+
optional: true
|
1429 |
+
|
1430 |
+
'@radix-ui/[email protected]':
|
1431 |
+
resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==}
|
1432 |
+
peerDependencies:
|
1433 |
+
'@types/react': '*'
|
1434 |
+
'@types/react-dom': '*'
|
1435 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1436 |
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1437 |
+
peerDependenciesMeta:
|
1438 |
+
'@types/react':
|
1439 |
+
optional: true
|
1440 |
+
'@types/react-dom':
|
1441 |
+
optional: true
|
1442 |
+
|
1443 |
+
'@radix-ui/[email protected]':
|
1444 |
+
resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
|
1445 |
+
peerDependencies:
|
1446 |
+
'@types/react': '*'
|
1447 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1448 |
+
peerDependenciesMeta:
|
1449 |
+
'@types/react':
|
1450 |
+
optional: true
|
1451 |
+
|
1452 |
+
'@radix-ui/[email protected]':
|
1453 |
+
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
|
1454 |
+
peerDependencies:
|
1455 |
+
'@types/react': '*'
|
1456 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1457 |
+
peerDependenciesMeta:
|
1458 |
+
'@types/react':
|
1459 |
+
optional: true
|
1460 |
+
|
1461 |
+
'@radix-ui/[email protected]':
|
1462 |
+
resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
|
1463 |
+
peerDependencies:
|
1464 |
+
'@types/react': '*'
|
1465 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1466 |
+
peerDependenciesMeta:
|
1467 |
+
'@types/react':
|
1468 |
+
optional: true
|
1469 |
+
|
1470 |
+
'@radix-ui/[email protected]':
|
1471 |
+
resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
|
1472 |
+
peerDependencies:
|
1473 |
+
'@types/react': '*'
|
1474 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1475 |
+
peerDependenciesMeta:
|
1476 |
+
'@types/react':
|
1477 |
+
optional: true
|
1478 |
+
|
1479 |
+
'@radix-ui/[email protected]':
|
1480 |
+
resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
|
1481 |
+
peerDependencies:
|
1482 |
+
'@types/react': '*'
|
1483 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1484 |
+
peerDependenciesMeta:
|
1485 |
+
'@types/react':
|
1486 |
+
optional: true
|
1487 |
+
|
1488 |
+
'@radix-ui/[email protected]':
|
1489 |
+
resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
|
1490 |
+
peerDependencies:
|
1491 |
+
'@types/react': '*'
|
1492 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1493 |
+
peerDependenciesMeta:
|
1494 |
+
'@types/react':
|
1495 |
+
optional: true
|
1496 |
+
|
1497 |
+
'@radix-ui/[email protected]':
|
1498 |
+
resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
|
1499 |
+
peerDependencies:
|
1500 |
+
'@types/react': '*'
|
1501 |
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
1502 |
+
peerDependenciesMeta:
|
1503 |
+
'@types/react':
|
1504 |
+
optional: true
|
1505 |
+
|
1506 |
+
'@radix-ui/[email protected]':
|
1507 |
+
resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
|
1508 |
+
|
1509 |
'@remix-run/[email protected]':
|
1510 |
resolution: {integrity: sha512-HaOdGkSMhe4zg1M8KDNNKb7VgBIHGpi0/90aLdYmzvZy+yeR0NOdrQh4P6gAYGCGSzqttuPOEIr4laXtBKI7Yg==}
|
1511 |
engines: {node: '>=18.0.0'}
|
|
|
2158 | |
2159 |
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
2160 |
|
2161 | |
2162 |
+
resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
|
2163 |
+
engines: {node: '>=10'}
|
2164 |
+
|
2165 | |
2166 |
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
|
2167 |
|
|
|
2651 |
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
|
2652 |
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
2653 |
|
2654 | |
2655 |
+
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
|
2656 |
+
|
2657 | |
2658 |
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
2659 |
|
|
|
3071 |
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
|
3072 |
engines: {node: '>= 0.4'}
|
3073 |
|
3074 | |
3075 |
+
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
|
3076 |
+
engines: {node: '>=6'}
|
3077 |
+
|
3078 | |
3079 |
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
|
3080 |
engines: {node: '>=8'}
|
|
|
3297 | |
3298 |
resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
|
3299 |
|
3300 | |
3301 |
+
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
|
3302 |
+
|
3303 | |
3304 |
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
|
3305 |
engines: {node: '>= 0.10'}
|
|
|
4494 |
resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
|
4495 |
engines: {node: '>=0.10.0'}
|
4496 |
|
4497 | |
4498 |
+
resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
|
4499 |
+
engines: {node: '>=10'}
|
4500 |
+
peerDependencies:
|
4501 |
+
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
|
4502 |
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
4503 |
+
peerDependenciesMeta:
|
4504 |
+
'@types/react':
|
4505 |
+
optional: true
|
4506 |
+
|
4507 | |
4508 |
+
resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
|
4509 |
+
engines: {node: '>=10'}
|
4510 |
+
peerDependencies:
|
4511 |
+
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
|
4512 |
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
4513 |
+
peerDependenciesMeta:
|
4514 |
+
'@types/react':
|
4515 |
+
optional: true
|
4516 |
+
|
4517 | |
4518 |
resolution: {integrity: sha512-aMbK3VF8U+VBICG+rwhE0Rr/eFZaRzmNq3akBRL1TrayIpLXz7Rbok0//kYeWj6SQRsjcQ3f4eRplJicM+oL6w==}
|
4519 |
peerDependencies:
|
|
|
4533 |
peerDependencies:
|
4534 |
react: '>=16.8'
|
4535 |
|
4536 | |
4537 |
+
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
|
4538 |
+
engines: {node: '>=10'}
|
4539 |
+
peerDependencies:
|
4540 |
+
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
|
4541 |
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
4542 |
+
peerDependenciesMeta:
|
4543 |
+
'@types/react':
|
4544 |
+
optional: true
|
4545 |
+
|
4546 | |
4547 |
resolution: {integrity: sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==}
|
4548 |
peerDependencies:
|
|
|
5193 | |
5194 |
resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
|
5195 |
|
5196 | |
5197 |
+
resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
|
5198 |
+
engines: {node: '>=10'}
|
5199 |
+
peerDependencies:
|
5200 |
+
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
|
5201 |
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
5202 |
+
peerDependenciesMeta:
|
5203 |
+
'@types/react':
|
5204 |
+
optional: true
|
5205 |
+
|
5206 | |
5207 |
+
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
|
5208 |
+
engines: {node: '>=10'}
|
5209 |
+
peerDependencies:
|
5210 |
+
'@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
|
5211 |
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
5212 |
+
peerDependenciesMeta:
|
5213 |
+
'@types/react':
|
5214 |
+
optional: true
|
5215 |
+
|
5216 | |
5217 |
resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
|
5218 |
peerDependencies:
|
|
|
6338 |
|
6339 |
'@fastify/[email protected]': {}
|
6340 |
|
6341 |
+
'@floating-ui/[email protected]':
|
6342 |
+
dependencies:
|
6343 |
+
'@floating-ui/utils': 0.2.7
|
6344 |
+
|
6345 |
+
'@floating-ui/[email protected]':
|
6346 |
+
dependencies:
|
6347 |
+
'@floating-ui/core': 1.6.7
|
6348 |
+
'@floating-ui/utils': 0.2.7
|
6349 |
+
|
6350 |
+
'@floating-ui/[email protected]([email protected]([email protected]))([email protected])':
|
6351 |
+
dependencies:
|
6352 |
+
'@floating-ui/dom': 1.6.10
|
6353 |
+
react: 18.3.1
|
6354 |
+
react-dom: 18.3.1([email protected])
|
6355 |
+
|
6356 |
+
'@floating-ui/[email protected]': {}
|
6357 |
+
|
6358 |
'@humanwhocodes/[email protected]': {}
|
6359 |
|
6360 |
'@humanwhocodes/[email protected]': {}
|
|
|
6562 |
|
6563 |
'@polka/[email protected]': {}
|
6564 |
|
6565 |
+
'@radix-ui/[email protected]': {}
|
6566 |
+
|
6567 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6568 |
+
dependencies:
|
6569 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6570 |
+
react: 18.3.1
|
6571 |
+
react-dom: 18.3.1([email protected])
|
6572 |
+
optionalDependencies:
|
6573 |
+
'@types/react': 18.3.3
|
6574 |
+
'@types/react-dom': 18.3.0
|
6575 |
+
|
6576 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6577 |
+
dependencies:
|
6578 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6579 |
+
'@radix-ui/react-context': 1.1.0(@types/[email protected])([email protected])
|
6580 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6581 |
+
'@radix-ui/react-slot': 1.1.0(@types/[email protected])([email protected])
|
6582 |
+
react: 18.3.1
|
6583 |
+
react-dom: 18.3.1([email protected])
|
6584 |
+
optionalDependencies:
|
6585 |
+
'@types/react': 18.3.3
|
6586 |
+
'@types/react-dom': 18.3.0
|
6587 |
+
|
6588 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6589 |
+
dependencies:
|
6590 |
+
react: 18.3.1
|
6591 |
+
optionalDependencies:
|
6592 |
+
'@types/react': 18.3.3
|
6593 |
+
|
6594 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6595 |
+
dependencies:
|
6596 |
+
react: 18.3.1
|
6597 |
+
optionalDependencies:
|
6598 |
+
'@types/react': 18.3.3
|
6599 |
+
|
6600 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6601 |
+
dependencies:
|
6602 |
+
react: 18.3.1
|
6603 |
+
optionalDependencies:
|
6604 |
+
'@types/react': 18.3.3
|
6605 |
+
|
6606 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6607 |
+
dependencies:
|
6608 |
+
'@radix-ui/primitive': 1.1.0
|
6609 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6610 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6611 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6612 |
+
'@radix-ui/react-use-escape-keydown': 1.1.0(@types/[email protected])([email protected])
|
6613 |
+
react: 18.3.1
|
6614 |
+
react-dom: 18.3.1([email protected])
|
6615 |
+
optionalDependencies:
|
6616 |
+
'@types/react': 18.3.3
|
6617 |
+
'@types/react-dom': 18.3.0
|
6618 |
+
|
6619 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6620 |
+
dependencies:
|
6621 |
+
'@radix-ui/primitive': 1.1.0
|
6622 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6623 |
+
'@radix-ui/react-context': 1.1.0(@types/[email protected])([email protected])
|
6624 |
+
'@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
|
6625 |
+
'@radix-ui/react-menu': 2.1.1(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6626 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6627 |
+
'@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
|
6628 |
+
react: 18.3.1
|
6629 |
+
react-dom: 18.3.1([email protected])
|
6630 |
+
optionalDependencies:
|
6631 |
+
'@types/react': 18.3.3
|
6632 |
+
'@types/react-dom': 18.3.0
|
6633 |
+
|
6634 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6635 |
+
dependencies:
|
6636 |
+
react: 18.3.1
|
6637 |
+
optionalDependencies:
|
6638 |
+
'@types/react': 18.3.3
|
6639 |
+
|
6640 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6641 |
+
dependencies:
|
6642 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6643 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6644 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6645 |
+
react: 18.3.1
|
6646 |
+
react-dom: 18.3.1([email protected])
|
6647 |
+
optionalDependencies:
|
6648 |
+
'@types/react': 18.3.3
|
6649 |
+
'@types/react-dom': 18.3.0
|
6650 |
+
|
6651 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6652 |
+
dependencies:
|
6653 |
+
'@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
|
6654 |
+
react: 18.3.1
|
6655 |
+
optionalDependencies:
|
6656 |
+
'@types/react': 18.3.3
|
6657 |
+
|
6658 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6659 |
+
dependencies:
|
6660 |
+
'@radix-ui/primitive': 1.1.0
|
6661 |
+
'@radix-ui/react-collection': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6662 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6663 |
+
'@radix-ui/react-context': 1.1.0(@types/[email protected])([email protected])
|
6664 |
+
'@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
|
6665 |
+
'@radix-ui/react-dismissable-layer': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6666 |
+
'@radix-ui/react-focus-guards': 1.1.0(@types/[email protected])([email protected])
|
6667 |
+
'@radix-ui/react-focus-scope': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6668 |
+
'@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
|
6669 |
+
'@radix-ui/react-popper': 1.2.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6670 |
+
'@radix-ui/react-portal': 1.1.1(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6671 |
+
'@radix-ui/react-presence': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6672 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6673 |
+
'@radix-ui/react-roving-focus': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6674 |
+
'@radix-ui/react-slot': 1.1.0(@types/[email protected])([email protected])
|
6675 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6676 |
+
aria-hidden: 1.2.4
|
6677 |
+
react: 18.3.1
|
6678 |
+
react-dom: 18.3.1([email protected])
|
6679 |
+
react-remove-scroll: 2.5.7(@types/[email protected])([email protected])
|
6680 |
+
optionalDependencies:
|
6681 |
+
'@types/react': 18.3.3
|
6682 |
+
'@types/react-dom': 18.3.0
|
6683 |
+
|
6684 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6685 |
+
dependencies:
|
6686 |
+
'@floating-ui/react-dom': 2.1.1([email protected]([email protected]))([email protected])
|
6687 |
+
'@radix-ui/react-arrow': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6688 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6689 |
+
'@radix-ui/react-context': 1.1.0(@types/[email protected])([email protected])
|
6690 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6691 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6692 |
+
'@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
|
6693 |
+
'@radix-ui/react-use-rect': 1.1.0(@types/[email protected])([email protected])
|
6694 |
+
'@radix-ui/react-use-size': 1.1.0(@types/[email protected])([email protected])
|
6695 |
+
'@radix-ui/rect': 1.1.0
|
6696 |
+
react: 18.3.1
|
6697 |
+
react-dom: 18.3.1([email protected])
|
6698 |
+
optionalDependencies:
|
6699 |
+
'@types/react': 18.3.3
|
6700 |
+
'@types/react-dom': 18.3.0
|
6701 |
+
|
6702 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6703 |
+
dependencies:
|
6704 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6705 |
+
'@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
|
6706 |
+
react: 18.3.1
|
6707 |
+
react-dom: 18.3.1([email protected])
|
6708 |
+
optionalDependencies:
|
6709 |
+
'@types/react': 18.3.3
|
6710 |
+
'@types/react-dom': 18.3.0
|
6711 |
+
|
6712 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6713 |
+
dependencies:
|
6714 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6715 |
+
'@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
|
6716 |
+
react: 18.3.1
|
6717 |
+
react-dom: 18.3.1([email protected])
|
6718 |
+
optionalDependencies:
|
6719 |
+
'@types/react': 18.3.3
|
6720 |
+
'@types/react-dom': 18.3.0
|
6721 |
+
|
6722 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6723 |
+
dependencies:
|
6724 |
+
'@radix-ui/react-slot': 1.1.0(@types/[email protected])([email protected])
|
6725 |
+
react: 18.3.1
|
6726 |
+
react-dom: 18.3.1([email protected])
|
6727 |
+
optionalDependencies:
|
6728 |
+
'@types/react': 18.3.3
|
6729 |
+
'@types/react-dom': 18.3.0
|
6730 |
+
|
6731 |
+
'@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])':
|
6732 |
+
dependencies:
|
6733 |
+
'@radix-ui/primitive': 1.1.0
|
6734 |
+
'@radix-ui/react-collection': 1.1.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6735 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6736 |
+
'@radix-ui/react-context': 1.1.0(@types/[email protected])([email protected])
|
6737 |
+
'@radix-ui/react-direction': 1.1.0(@types/[email protected])([email protected])
|
6738 |
+
'@radix-ui/react-id': 1.1.0(@types/[email protected])([email protected])
|
6739 |
+
'@radix-ui/react-primitive': 2.0.0(@types/[email protected])(@types/[email protected])([email protected]([email protected]))([email protected])
|
6740 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6741 |
+
'@radix-ui/react-use-controllable-state': 1.1.0(@types/[email protected])([email protected])
|
6742 |
+
react: 18.3.1
|
6743 |
+
react-dom: 18.3.1([email protected])
|
6744 |
+
optionalDependencies:
|
6745 |
+
'@types/react': 18.3.3
|
6746 |
+
'@types/react-dom': 18.3.0
|
6747 |
+
|
6748 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6749 |
+
dependencies:
|
6750 |
+
'@radix-ui/react-compose-refs': 1.1.0(@types/[email protected])([email protected])
|
6751 |
+
react: 18.3.1
|
6752 |
+
optionalDependencies:
|
6753 |
+
'@types/react': 18.3.3
|
6754 |
+
|
6755 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6756 |
+
dependencies:
|
6757 |
+
react: 18.3.1
|
6758 |
+
optionalDependencies:
|
6759 |
+
'@types/react': 18.3.3
|
6760 |
+
|
6761 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6762 |
+
dependencies:
|
6763 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6764 |
+
react: 18.3.1
|
6765 |
+
optionalDependencies:
|
6766 |
+
'@types/react': 18.3.3
|
6767 |
+
|
6768 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6769 |
+
dependencies:
|
6770 |
+
'@radix-ui/react-use-callback-ref': 1.1.0(@types/[email protected])([email protected])
|
6771 |
+
react: 18.3.1
|
6772 |
+
optionalDependencies:
|
6773 |
+
'@types/react': 18.3.3
|
6774 |
+
|
6775 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6776 |
+
dependencies:
|
6777 |
+
react: 18.3.1
|
6778 |
+
optionalDependencies:
|
6779 |
+
'@types/react': 18.3.3
|
6780 |
+
|
6781 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6782 |
+
dependencies:
|
6783 |
+
'@radix-ui/rect': 1.1.0
|
6784 |
+
react: 18.3.1
|
6785 |
+
optionalDependencies:
|
6786 |
+
'@types/react': 18.3.3
|
6787 |
+
|
6788 |
+
'@radix-ui/[email protected](@types/[email protected])([email protected])':
|
6789 |
+
dependencies:
|
6790 |
+
'@radix-ui/react-use-layout-effect': 1.1.0(@types/[email protected])([email protected])
|
6791 |
+
react: 18.3.1
|
6792 |
+
optionalDependencies:
|
6793 |
+
'@types/react': 18.3.3
|
6794 |
+
|
6795 |
+
'@radix-ui/[email protected]': {}
|
6796 |
+
|
6797 |
'@remix-run/[email protected](@cloudflare/[email protected])([email protected])':
|
6798 |
dependencies:
|
6799 |
'@cloudflare/workers-types': 4.20240620.0
|
|
|
7680 |
|
7681 | |
7682 |
|
7683 | |
7684 |
+
dependencies:
|
7685 |
+
tslib: 2.6.3
|
7686 |
+
|
7687 | |
7688 |
dependencies:
|
7689 |
dequal: 2.0.3
|
|
|
8213 |
|
8214 | |
8215 |
|
8216 |
+
[email protected]: {}
|
8217 |
+
|
8218 | |
8219 |
dependencies:
|
8220 |
dequal: 2.0.3
|
|
|
8750 |
has-symbols: 1.0.3
|
8751 |
hasown: 2.0.2
|
8752 |
|
8753 |
+
[email protected]: {}
|
8754 |
+
|
8755 | |
8756 |
|
8757 | |
|
|
9025 |
|
9026 | |
9027 |
|
9028 | |
9029 |
+
dependencies:
|
9030 |
+
loose-envify: 1.4.0
|
9031 |
+
|
9032 | |
9033 |
|
9034 | |
|
|
10578 |
|
10579 | |
10580 |
|
10581 |
+
[email protected](@types/[email protected])([email protected]):
|
10582 |
+
dependencies:
|
10583 |
+
react: 18.3.1
|
10584 |
+
react-style-singleton: 2.2.1(@types/[email protected])([email protected])
|
10585 |
+
tslib: 2.6.3
|
10586 |
+
optionalDependencies:
|
10587 |
+
'@types/react': 18.3.3
|
10588 |
+
|
10589 |
+
[email protected](@types/[email protected])([email protected]):
|
10590 |
+
dependencies:
|
10591 |
+
react: 18.3.1
|
10592 |
+
react-remove-scroll-bar: 2.3.6(@types/[email protected])([email protected])
|
10593 |
+
react-style-singleton: 2.2.1(@types/[email protected])([email protected])
|
10594 |
+
tslib: 2.6.3
|
10595 |
+
use-callback-ref: 1.3.2(@types/[email protected])([email protected])
|
10596 |
+
use-sidecar: 1.1.2(@types/[email protected])([email protected])
|
10597 |
+
optionalDependencies:
|
10598 |
+
'@types/react': 18.3.3
|
10599 |
+
|
10600 | |
10601 |
dependencies:
|
10602 |
react: 18.3.1
|
|
|
10614 |
'@remix-run/router': 1.17.1
|
10615 |
react: 18.3.1
|
10616 |
|
10617 |
+
[email protected](@types/[email protected])([email protected]):
|
10618 |
+
dependencies:
|
10619 |
+
get-nonce: 1.0.1
|
10620 |
+
invariant: 2.2.4
|
10621 |
+
react: 18.3.1
|
10622 |
+
tslib: 2.6.3
|
10623 |
+
optionalDependencies:
|
10624 |
+
'@types/react': 18.3.3
|
10625 |
+
|
10626 | |
10627 |
dependencies:
|
10628 |
clsx: 2.1.1
|
|
|
11370 |
punycode: 1.4.1
|
11371 |
qs: 6.12.3
|
11372 |
|
11373 |
+
[email protected](@types/[email protected])([email protected]):
|
11374 |
+
dependencies:
|
11375 |
+
react: 18.3.1
|
11376 |
+
tslib: 2.6.3
|
11377 |
+
optionalDependencies:
|
11378 |
+
'@types/react': 18.3.3
|
11379 |
+
|
11380 |
+
[email protected](@types/[email protected])([email protected]):
|
11381 |
+
dependencies:
|
11382 |
+
detect-node-es: 1.1.0
|
11383 |
+
react: 18.3.1
|
11384 |
+
tslib: 2.6.3
|
11385 |
+
optionalDependencies:
|
11386 |
+
'@types/react': 18.3.3
|
11387 |
+
|
11388 | |
11389 |
dependencies:
|
11390 |
react: 18.3.1
|