mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-11-07 06:19:43 -10:00
* fix(web-shell): polish files and trim preview resources * test(cli): observe pending child Hook promises * fix(web-shell): address Files browser review findings * fix(vscode): sync Pierre modification notices * chore: ignore the repo-local .pnpm-store fallback directory pnpm falls back to a project-local store at .pnpm-store/ when the global store directory is not writable (e.g. sandboxed CI runners). It is a regenerable cache that node_modules hard-links into; its thousands of untracked files otherwise dirty the working tree and fail deterministic workspace-clean verification. Co-authored-by: Qwen-Coder <[email protected]> * fix(web-shell): address Pierre preview and file display review findings - getPreviewLanguage folds case on the extension only, so README.MD and config.YML highlight while whole-name detector keys (Gemfile, BUILD) keep their case-sensitive behavior - formatFileName strips the full Default_Ignorable_Code_Point class so zero-advance Hangul fillers and variation selectors cannot desync the tree search projection from the rendered name - pin the previously unwitnessed pierre-build guards: redirected Shiki subpaths count toward the 4 MiB budget, getModuleInfo may return null for redirected ids, emitted assets are skipped, and entry-module resolveId calls carry no importer - pin the theme name->module mapping with exact token colors and give the formatFileName display sites discriminating coverage with repeated-space names --------- Co-authored-by: 钉萁 <[email protected]> Co-authored-by: qwen-code[bot] <qwen-code[bot]@users.noreply.github.com> Co-authored-by: Qwen-Coder <[email protected]> Co-authored-by: qwen-code-dev-bot <[email protected]>
145 lines
4.6 KiB
TypeScript
145 lines
4.6 KiB
TypeScript
import * as React from 'react';
|
|
import { Drawer as DrawerPrimitive } from 'vaul';
|
|
|
|
import { cn } from '@/lib/utils';
|
|
import { useWebShellPortalRoot } from '../../portalRoot';
|
|
|
|
function Drawer({
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Root>) {
|
|
return <DrawerPrimitive.Root data-slot="drawer" {...props} />;
|
|
}
|
|
|
|
function DrawerTrigger({
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {
|
|
return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />;
|
|
}
|
|
|
|
function DrawerPortal({
|
|
container,
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {
|
|
const portalRoot = useWebShellPortalRoot();
|
|
return (
|
|
<DrawerPrimitive.Portal
|
|
data-slot="drawer-portal"
|
|
container={container ?? portalRoot ?? undefined}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function DrawerClose({
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Close>) {
|
|
return <DrawerPrimitive.Close data-slot="drawer-close" {...props} />;
|
|
}
|
|
|
|
const DrawerOverlay: React.ForwardRefExoticComponent<
|
|
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay> &
|
|
React.RefAttributes<HTMLDivElement>
|
|
> = React.forwardRef<
|
|
React.ComponentRef<typeof DrawerPrimitive.Overlay>,
|
|
React.ComponentProps<typeof DrawerPrimitive.Overlay>
|
|
>(function DrawerOverlay({ className, ...props }, ref) {
|
|
return (
|
|
<DrawerPrimitive.Overlay
|
|
ref={ref}
|
|
data-slot="drawer-overlay"
|
|
className={cn(
|
|
'fixed inset-0 isolate z-[var(--web-shell-dialog-backdrop-z-index,50)] bg-black/10 duration-150 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0',
|
|
className,
|
|
)}
|
|
{...props}
|
|
/>
|
|
);
|
|
});
|
|
|
|
type DrawerContentProps = React.ComponentProps<
|
|
typeof DrawerPrimitive.Content
|
|
> & {
|
|
overlayProps?: React.ComponentProps<typeof DrawerPrimitive.Overlay>;
|
|
};
|
|
|
|
const DrawerContent = React.forwardRef<
|
|
React.ComponentRef<typeof DrawerPrimitive.Content>,
|
|
DrawerContentProps
|
|
>(function DrawerContent({ className, children, overlayProps, ...props }, ref) {
|
|
return (
|
|
<DrawerPortal>
|
|
<DrawerOverlay {...overlayProps} />
|
|
<DrawerPrimitive.Content
|
|
ref={ref}
|
|
data-slot="drawer-content"
|
|
className={cn(
|
|
'group/drawer-content fixed z-[var(--web-shell-dialog-backdrop-z-index,50)] flex h-auto flex-col bg-popover text-sm text-popover-foreground outline-none data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm',
|
|
className,
|
|
)}
|
|
{...props}
|
|
>
|
|
{children}
|
|
</DrawerPrimitive.Content>
|
|
</DrawerPortal>
|
|
);
|
|
});
|
|
|
|
function DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {
|
|
return (
|
|
<div
|
|
data-slot="drawer-header"
|
|
className={cn('flex flex-col gap-0.5 p-4', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {
|
|
return (
|
|
<div
|
|
data-slot="drawer-footer"
|
|
className={cn('mt-auto flex flex-col gap-2 p-4', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function DrawerTitle({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Title>) {
|
|
return (
|
|
<DrawerPrimitive.Title
|
|
data-slot="drawer-title"
|
|
className={cn('text-base font-medium text-foreground', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function DrawerDescription({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof DrawerPrimitive.Description>) {
|
|
return (
|
|
<DrawerPrimitive.Description
|
|
data-slot="drawer-description"
|
|
className={cn('text-sm text-muted-foreground', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export {
|
|
Drawer,
|
|
DrawerPortal,
|
|
DrawerOverlay,
|
|
DrawerTrigger,
|
|
DrawerClose,
|
|
DrawerContent,
|
|
DrawerHeader,
|
|
DrawerFooter,
|
|
DrawerTitle,
|
|
DrawerDescription,
|
|
};
|