- Fastify API・Node Worker・PostgreSQL・S3互換ストレージ構成
- ADP ZIPのマルチパートアップロードとManifest検証(パストラバーサル・ZIP爆弾等を拒否)
- manifest.json/signatureは再シリアライズせず元バイト列を保持
- Cloudflare風の運用向け管理ダッシュボード(shadcn/Radix・日本語UI・4ルート)
概要/Sources/アプリ/リリース + ルートランディングページ
- 汎用OIDC SSO・Workspace単位の認可・demo mode
- 匿名配布: /sources/{slug}/source.json, /artifacts/{releaseId}/manifest.json
- Docker Compose対応
34 lines
1.7 KiB
TypeScript
34 lines
1.7 KiB
TypeScript
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
import { X } from "lucide-react";
|
|
import type { ComponentPropsWithoutRef, PropsWithChildren } from "react";
|
|
import { cn } from "./utils";
|
|
|
|
export const Dialog = DialogPrimitive.Root;
|
|
export const DialogTrigger = DialogPrimitive.Trigger;
|
|
export const DialogClose = DialogPrimitive.Close;
|
|
|
|
export function DialogContent({ className, children, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Content>) {
|
|
return <DialogPrimitive.Portal><DialogPrimitive.Overlay className="ui-dialog-overlay" /><DialogPrimitive.Content className={cn("ui-dialog-content", className)} {...props}>{children}<DialogPrimitive.Close className="ui-dialog-close" aria-label="閉じる"><X size={16} /></DialogPrimitive.Close></DialogPrimitive.Content></DialogPrimitive.Portal>;
|
|
}
|
|
|
|
export function DialogHeader({ className, ...props }: ComponentPropsWithoutRef<"div">) {
|
|
return <div className={cn("ui-dialog-header", className)} {...props} />;
|
|
}
|
|
|
|
export function DialogTitle({ className, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Title>) {
|
|
return <DialogPrimitive.Title className={cn("ui-dialog-title", className)} {...props} />;
|
|
}
|
|
|
|
export function DialogDescription({ className, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Description>) {
|
|
return <DialogPrimitive.Description className={cn("ui-dialog-description", className)} {...props} />;
|
|
}
|
|
|
|
export function DialogFooter({ className, ...props }: ComponentPropsWithoutRef<"div">) {
|
|
return <div className={cn("ui-dialog-footer", className)} {...props} />;
|
|
}
|
|
|
|
export function DialogForm({ children, ...props }: PropsWithChildren<ComponentPropsWithoutRef<"form">>) {
|
|
return <form className="ui-dialog-form" {...props}>{children}</form>;
|
|
}
|
|
|