- Add shadcn/ui component library (button, card, input, popover, command, dialog, etc.) - Fix Tailwind CSS not scanning workspace packages by adding correct @source directives in globals.css (root cause: paths needed ../../../ not ../../ from apps/web/src/) - Improve secret selector: replace trigger button + separate search with single search input that expands into results on focus - Update auth sections across plugins to use rounded bordered containers
Unified · Split
| @@ -0,0 +1,21 @@ | |||
| 1 | { | ||
| 2 | "$schema": "https://ui.shadcn.com/schema.json", | ||
| 3 | "style": "base-nova", | ||
| 4 | "rsc": false, | ||
| 5 | "tsx": true, | ||
| 6 | "tailwind": { | ||
| 7 | "config": "", | ||
| 8 | "css": "src/globals.css", | ||
| 9 | "baseColor": "neutral", | ||
| 10 | "cssVariables": true, | ||
| 11 | "prefix": "" | ||
| 12 | }, | ||
| 13 | "iconLibrary": "lucide", | ||
| 14 | "aliases": { | ||
| 15 | "components": "@/components", | ||
| 16 | "hooks": "@/hooks", | ||
| 17 | "lib": "@/lib", | ||
| 18 | "utils": "@/lib/utils", | ||
| 19 | "ui": "@/components/ui" | ||
| 20 | } | ||
| 21 | } | ||
| @@ -9,13 +9,14 @@ · 8 unmodified lines | |||
| 9 | "start": "NODE_ENV=production bun src/server.ts" | 9 | "start": "NODE_ENV=production bun src/server.ts" |
| 10 | }, | 10 | }, |
| 11 | "dependencies": { | 11 | "dependencies": { |
| 12 | "@base-ui/react": "^1.3.0", | ||
| 12 | "@executor/plugin-execution-history-react": "workspace:*", | 13 | "@executor/plugin-execution-history-react": "workspace:*", |
| 13 | "@executor/plugin-google-discovery-react": "workspace:*", | 14 | "@executor/plugin-google-discovery-react": "workspace:*", |
| 14 | "@executor/plugin-graphql-react": "workspace:*", | 15 | "@executor/plugin-graphql-react": "workspace:*", |
| 15 | "@executor/plugin-local-tools-react": "workspace:*", | 16 | "@executor/plugin-local-tools-react": "workspace:*", |
| 16 | "@executor/plugin-mcp-react": "workspace:*", | 17 | "@executor/plugin-mcp-react": "workspace:*", |
| 17 | "@executor/plugin-openapi-react": "workspace:*", | ||
| 18 | "@executor/plugin-onepassword-react": "workspace:*", | 18 | "@executor/plugin-onepassword-react": "workspace:*", |
| 19 | "@executor/plugin-openapi-react": "workspace:*", | ||
| 19 | "@executor/react": "workspace:*", | 20 | "@executor/react": "workspace:*", |
| 20 | "@executor/server": "workspace:*", | 21 | "@executor/server": "workspace:*", |
| 21 | "@shikijs/langs": "^4.0.1", | 22 | "@shikijs/langs": "^4.0.1", |
| @@ -24,9 +25,11 @@ · 2 unmodified lines | |||
| 24 | "class-variance-authority": "^0.7.1", | 25 | "class-variance-authority": "^0.7.1", |
| 25 | "clsx": "^2.1.1", | 26 | "clsx": "^2.1.1", |
| 26 | "effect": "catalog:", | 27 | "effect": "catalog:", |
| 28 | "lucide-react": "^1.7.0", | ||
| 27 | "react": "^19.2.0", | 29 | "react": "^19.2.0", |
| 28 | "react-dom": "^19.2.0", | 30 | "react-dom": "^19.2.0", |
| 29 | "react-grab": "^0.1.26", | 31 | "react-grab": "^0.1.26", |
| 32 | "shadcn": "^4.1.1", | ||
| 30 | "shiki": "^4.0.1", | 33 | "shiki": "^4.0.1", |
| 31 | "streamdown": "^2.3.0", | 34 | "streamdown": "^2.3.0", |
| 32 | "tailwind-merge": "^3.5.0", | 35 | "tailwind-merge": "^3.5.0", |
| @@ -1,4 +1,5 @@ | |||
| 1 | import { useEffect, useState, useRef, useCallback } from "react"; | 1 | import { useEffect, useState, useRef, useCallback } from "react"; |
| 2 | import { Button } from "@executor/react/plugins"; | ||
| 2 | import { codeToHtml, resolveLang } from "../lib/shiki"; | 3 | import { codeToHtml, resolveLang } from "../lib/shiki"; |
| 3 | import { cn } from "../lib/utils"; | 4 | import { cn } from "../lib/utils"; |
| 4 | import { IconCopy, IconCheck } from "./icons"; | 5 | import { IconCopy, IconCheck } from "./icons"; |
| @@ -68,14 +69,16 @@ export function CodeBlock(props: { · 63 unmodified lines | |||
| 68 | return ( | 69 | return ( |
| 69 | <div className={cn("group relative overflow-auto", className)}> | 70 | <div className={cn("group relative overflow-auto", className)}> |
| 70 | {/* Copy button */} | 71 | {/* Copy button */} |
| 71 | <button | 72 | <Button |
| 72 | type="button" | 73 | type="button" |
| 74 | variant="ghost" | ||
| 75 | size="icon" | ||
| 73 | onClick={handleCopy} | 76 | onClick={handleCopy} |
| 74 | className="absolute right-2 top-2 z-10 rounded-md border border-border bg-card/90 p-1.5 text-muted-foreground/40 opacity-0 backdrop-blur-sm transition-all hover:text-foreground group-hover:opacity-100" | 77 | className="absolute right-2 top-2 z-10 size-7 rounded-md border border-border bg-card/90 text-muted-foreground/40 opacity-0 backdrop-blur-sm transition-all hover:text-foreground group-hover:opacity-100" |
| 75 | title="Copy to clipboard" | 78 | title="Copy to clipboard" |
| 76 | > | 79 | > |
| 77 | {copied ? <IconCheck className="size-3" /> : <IconCopy className="size-3" />} | 80 | {copied ? <IconCheck className="size-3" /> : <IconCopy className="size-3" />} |
| 78 | </button> | 81 | </Button> |
| 79 | 82 | ||
| 80 | {html ? ( | 83 | {html ? ( |
| 81 | <div | 84 | <div |
| @@ -1,4 +1,5 @@ | |||
| 1 | import { useEffect, useState } from "react"; | 1 | import { useEffect, useState } from "react"; |
| 2 | import { Button } from "@executor/react/plugins"; | ||
| 2 | import { CodeBlock } from "./code-block"; | 3 | import { CodeBlock } from "./code-block"; |
| 3 | import { cn } from "../lib/utils"; | 4 | import { cn } from "../lib/utils"; |
| 4 | 5 | ||
| @@ -44,19 +45,16 @@ export function LocalMcpInstallCard(props: { · 39 unmodified lines | |||
| 44 | { key: "stdio" as const, label: "Standard I/O" }, | 45 | { key: "stdio" as const, label: "Standard I/O" }, |
| 45 | { key: "http" as const, label: "Remote HTTP" }, | 46 | { key: "http" as const, label: "Remote HTTP" }, |
| 46 | ].map((option) => ( | 47 | ].map((option) => ( |
| 47 | <button | 48 | <Button |
| 48 | key={option.key} | 49 | key={option.key} |
| 49 | type="button" | 50 | type="button" |
| 51 | variant={mode === option.key ? "default" : "ghost"} | ||
| 52 | size="sm" | ||
| 50 | onClick={() => setMode(option.key)} | 53 | onClick={() => setMode(option.key)} |
| 51 | className={cn( | 54 | className="rounded-md px-3 py-1.5" |
| 52 | "rounded-md px-3 py-1.5 text-xs font-medium transition-colors", | ||
| 53 | mode === option.key | ||
| 54 | ? "bg-primary text-primary-foreground" | ||
| 55 | : "text-muted-foreground hover:bg-accent hover:text-accent-foreground", | ||
| 56 | )} | ||
| 57 | > | 55 | > |
| 58 | {option.label} | 56 | {option.label} |
| 59 | </button> | 57 | </Button> |
| 60 | ))} | 58 | ))} |
| 61 | </div> | 59 | </div> |
| 62 | <CodeBlock code={command} lang="bash" className="rounded-xl border border-border bg-background/70" /> | 60 | <CodeBlock code={command} lang="bash" className="rounded-xl border border-border bg-background/70" /> |
| @@ -1,7 +1,7 @@ | |||
| 1 | import { Link, Outlet, useLocation, useMatchRoute } from "@tanstack/react-router"; | 1 | import { Link, Outlet, useLocation, useMatchRoute } from "@tanstack/react-router"; |
| 2 | import { useCallback, useEffect, useState } from "react"; | 2 | import { useCallback, useEffect, useState } from "react"; |
| 3 | import { useSources, type Source } from "@executor/react"; | 3 | import { useSources, type Source } from "@executor/react"; |
| 4 | import { sourcePluginsIndexPath } from "@executor/react/plugins"; | 4 | import { Button, sourcePluginsIndexPath } from "@executor/react/plugins"; |
| 5 | import { cn } from "../lib/utils"; | 5 | import { cn } from "../lib/utils"; |
| 6 | import { IconPlus, IconCopy, IconCheck, IconClose, IconMenu } from "./icons"; | 6 | import { IconPlus, IconCopy, IconCheck, IconClose, IconMenu } from "./icons"; |
| 7 | import { LoadableBlock } from "./loadable"; | 7 | import { LoadableBlock } from "./loadable"; |
| @@ -199,10 +199,11 @@ function UpdateCard(props: { latestVersion: string; channel: UpdateChannel }) { · 191 unmodified lines | |||
| 199 | </p> | 199 | </p> |
| 200 | </div> | 200 | </div> |
| 201 | </div> | 201 | </div> |
| 202 | <button | 202 | <Button |
| 203 | type="button" | 203 | type="button" |
| 204 | variant="outline" | ||
| 204 | onClick={handleCopy} | 205 | onClick={handleCopy} |
| 205 | className="mt-2.5 flex w-full items-center justify-between gap-2 rounded-lg border border-border/60 bg-background/50 px-2.5 py-1.5 text-left transition-colors hover:bg-background/80" | 206 | className="mt-2.5 flex w-full items-center justify-between gap-2 rounded-lg border-border/60 bg-background/50 px-2.5 py-1.5 text-left hover:bg-background/80" |
| 206 | > | 207 | > |
| 207 | <code className="truncate font-mono text-[10px] text-sidebar-foreground"> | 208 | <code className="truncate font-mono text-[10px] text-sidebar-foreground"> |
| 208 | {command} | 209 | {command} |
| @@ -214,7 +215,7 @@ function UpdateCard(props: { latestVersion: string; channel: UpdateChannel }) { · 5 unmodified lines | |||
| 214 | <IconCopy className="size-3" /> | 215 | <IconCopy className="size-3" /> |
| 215 | )} | 216 | )} |
| 216 | </span> | 217 | </span> |
| 217 | </button> | 218 | </Button> |
| 218 | </div> | 219 | </div> |
| 219 | ); | 220 | ); |
| 220 | } | 221 | } |
| @@ -285,14 +286,16 @@ export function AppShell() { · 64 unmodified lines | |||
| 285 | v3 | 286 | v3 |
| 286 | </span> | 287 | </span> |
| 287 | </Link> | 288 | </Link> |
| 288 | <button | 289 | <Button |
| 289 | type="button" | 290 | type="button" |
| 291 | variant="ghost" | ||
| 292 | size="icon" | ||
| 290 | aria-label="Close navigation" | 293 | aria-label="Close navigation" |
| 291 | onClick={() => setMobileSidebarOpen(false)} | 294 | onClick={() => setMobileSidebarOpen(false)} |
| 292 | className="inline-flex size-8 items-center justify-center rounded-md text-sidebar-foreground transition-colors hover:bg-sidebar-active hover:text-foreground" | 295 | className="size-8 text-sidebar-foreground hover:bg-sidebar-active hover:text-foreground" |
| 293 | > | 296 | > |
| 294 | <IconClose className="size-3.5" /> | 297 | <IconClose className="size-3.5" /> |
| 295 | </button> | 298 | </Button> |
| 296 | </div> | 299 | </div> |
| 297 | <SidebarContent | 300 | <SidebarContent |
| 298 | isHome={!!isHome} | 301 | isHome={!!isHome} |
| @@ -314,14 +317,16 @@ export function AppShell() { · 15 unmodified lines | |||
| 314 | {/* Main content */} | 317 | {/* Main content */} |
| 315 | <main className="flex min-h-0 flex-1 flex-col min-w-0 overflow-hidden"> | 318 | <main className="flex min-h-0 flex-1 flex-col min-w-0 overflow-hidden"> |
| 316 | <div className="flex h-12 shrink-0 items-center justify-between border-b border-border bg-background px-4 md:hidden"> | 319 | <div className="flex h-12 shrink-0 items-center justify-between border-b border-border bg-background px-4 md:hidden"> |
| 317 | <button | 320 | <Button |
| 318 | type="button" | 321 | type="button" |
| 322 | variant="outline" | ||
| 323 | size="icon" | ||
| 319 | aria-label="Open navigation" | 324 | aria-label="Open navigation" |
| 320 | onClick={() => setMobileSidebarOpen(true)} | 325 | onClick={() => setMobileSidebarOpen(true)} |
| 321 | className="inline-flex size-8 items-center justify-center rounded-md border border-border bg-card text-foreground transition-colors hover:bg-accent/50" | 326 | className="size-8 bg-card hover:bg-accent/50" |
| 322 | > | 327 | > |
| 323 | <IconMenu className="size-4" /> | 328 | <IconMenu className="size-4" /> |
| 324 | </button> | 329 | </Button> |
| 325 | <Link to="/" className="flex items-center gap-1.5"> | 330 | <Link to="/" className="flex items-center gap-1.5"> |
| 326 | <span className="font-display text-base tracking-tight text-foreground"> | 331 | <span className="font-display text-base tracking-tight text-foreground"> |
| 327 | executor | 332 | executor |
| @@ -10,7 +10,7 @@ export function SourcePluginsResetState( · 9 unmodified lines | |||
| 10 | input: SourcePluginsResetStateProps, | 10 | input: SourcePluginsResetStateProps, |
| 11 | ) { | 11 | ) { |
| 12 | return ( | 12 | return ( |
| 13 | <div className="min-h-0 flex-1 overflow-y-auto max-w-[300px]"> | 13 | <div className="min-h-0 flex-1 overflow-y-auto"> |
| 14 | <div className="mx-auto max-w-3xl px-6 py-10 lg:px-10 lg:py-14"> | 14 | <div className="mx-auto max-w-3xl px-6 py-10 lg:px-10 lg:py-14"> |
| 15 | <div className="rounded-2xl border border-border bg-card p-8"> | 15 | <div className="rounded-2xl border border-border bg-card p-8"> |
| 16 | <h2 className="font-display text-xl tracking-tight text-foreground"> | 16 | <h2 className="font-display text-xl tracking-tight text-foreground"> |
| @@ -1,8 +1,7 @@ | |||
| 1 | import type { Source } from "@executor/react"; | 1 | import type { Source } from "@executor/react"; |
| 2 | 2 | ||
| 3 | import { Badge, Button } from "@executor/react/plugins"; | ||
| 3 | import { cn } from "../lib/utils"; | 4 | import { cn } from "../lib/utils"; |
| 4 | import { Button } from "./ui/button"; | ||
| 5 | import { Badge } from "./ui/badge"; | ||
| 6 | import { IconSpinner, IconTool } from "./icons"; | 5 | import { IconSpinner, IconTool } from "./icons"; |
| 7 | 6 | ||
| 8 | export function SourceRecoveryState(props: { | 7 | export function SourceRecoveryState(props: { |
| @@ -1,43 +0,0 @@ | |||
| 1 | import type { HTMLAttributes } from "react"; | ||
| 2 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 3 | import { cn } from "../../lib/utils"; | ||
| 4 | |||
| 5 | const badgeVariants = cva( | ||
| 6 | "inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase", | ||
| 7 | { | ||
| 8 | variants: { | ||
| 9 | variant: { | ||
| 10 | default: "border-transparent bg-primary/15 text-primary", | ||
| 11 | secondary: "border-transparent bg-secondary text-secondary-foreground", | ||
| 12 | outline: "border-border text-muted-foreground", | ||
| 13 | muted: "border-transparent bg-muted text-muted-foreground", | ||
| 14 | get: "border-[var(--method-get)]/20 bg-[var(--method-get)]/10 text-[var(--method-get)]", | ||
| 15 | post: "border-[var(--method-post)]/20 bg-[var(--method-post)]/10 text-[var(--method-post)]", | ||
| 16 | put: "border-[var(--method-put)]/20 bg-[var(--method-put)]/10 text-[var(--method-put)]", | ||
| 17 | delete: "border-[var(--method-delete)]/20 bg-[var(--method-delete)]/10 text-[var(--method-delete)]", | ||
| 18 | destructive: "border-destructive/20 bg-destructive/10 text-destructive", | ||
| 19 | }, | ||
| 20 | }, | ||
| 21 | defaultVariants: { | ||
| 22 | variant: "default", | ||
| 23 | }, | ||
| 24 | }, | ||
| 25 | ); | ||
| 26 | |||
| 27 | export type BadgeProps = HTMLAttributes<HTMLSpanElement> & VariantProps<typeof badgeVariants>; | ||
| 28 | |||
| 29 | export function Badge({ className, variant, ...props }: BadgeProps) { | ||
| 30 | return <span className={cn(badgeVariants({ variant }), className)} {...props} />; | ||
| 31 | } | ||
| 32 | |||
| 33 | export function MethodBadge({ method }: { method: string }) { | ||
| 34 | const variant = ({ | ||
| 35 | GET: "get", | ||
| 36 | POST: "post", | ||
| 37 | PUT: "put", | ||
| 38 | PATCH: "put", | ||
| 39 | DELETE: "delete", | ||
| 40 | } as const)[method.toUpperCase()] ?? "outline"; | ||
| 41 | |||
| 42 | return <Badge variant={variant}>{method}</Badge>; | ||
| 43 | } | ||
| @@ -1,34 +0,0 @@ | |||
| 1 | import type { ButtonHTMLAttributes } from "react"; | ||
| 2 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 3 | import { cn } from "../../lib/utils"; | ||
| 4 | |||
| 5 | const buttonVariants = cva( | ||
| 6 | "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background cursor-pointer", | ||
| 7 | { | ||
| 8 | variants: { | ||
| 9 | variant: { | ||
| 10 | default: "bg-primary text-primary-foreground hover:bg-primary/90", | ||
| 11 | secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", | ||
| 12 | outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground", | ||
| 13 | ghost: "hover:bg-accent hover:text-accent-foreground", | ||
| 14 | destructive: "bg-destructive text-white hover:bg-destructive/90", | ||
| 15 | }, | ||
| 16 | size: { | ||
| 17 | default: "h-9 px-4 py-2", | ||
| 18 | sm: "h-7 rounded-md px-2.5 text-xs", | ||
| 19 | lg: "h-10 rounded-md px-6", | ||
| 20 | icon: "h-8 w-8", | ||
| 21 | }, | ||
| 22 | }, | ||
| 23 | defaultVariants: { | ||
| 24 | variant: "default", | ||
| 25 | size: "default", | ||
| 26 | }, | ||
| 27 | }, | ||
| 28 | ); | ||
| 29 | |||
| 30 | type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants>; | ||
| 31 | |||
| 32 | export function Button({ className, variant, size, ...props }: ButtonProps) { | ||
| 33 | return <button className={cn(buttonVariants({ variant, size }), className)} {...props} />; | ||
| 34 | } | ||
| @@ -1,7 +1,10 @@ | |||
| 1 | @import "tailwindcss"; | 1 | @import "tailwindcss"; |
| 2 | @import "tw-animate-css"; | 2 | @import "tw-animate-css"; |
| 3 | @import "shadcn/tailwind.css"; | ||
| 3 | 4 | ||
| 4 | @source "../../node_modules/streamdown/dist/*.js"; | 5 | @source "../../../packages/clients/react/src/**/*.{ts,tsx}"; |
| 6 | @source "../../../plugins/*/react/**/*.{ts,tsx}"; | ||
| 7 | @source "../node_modules/streamdown/dist/*.js"; | ||
| 5 | 8 | ||
| 6 | @custom-variant dark (&:is(.dark *)); | 9 | @custom-variant dark (&:is(.dark *)); |
| 7 | 10 | ||
| @@ -9,6 +12,7 @@ · 1 unmodified line | |||
| 9 | --font-sans: "DM Sans", ui-sans-serif, system-ui, sans-serif; | 12 | --font-sans: "DM Sans", ui-sans-serif, system-ui, sans-serif; |
| 10 | --font-mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, monospace; | 13 | --font-mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, monospace; |
| 11 | --font-display: "Instrument Serif", Georgia, serif; | 14 | --font-display: "Instrument Serif", Georgia, serif; |
| 15 | --font-heading: var(--font-sans); | ||
| 12 | 16 | ||
| 13 | --color-background: var(--background); | 17 | --color-background: var(--background); |
| 14 | --color-foreground: var(--foreground); | 18 | --color-foreground: var(--foreground); |
| @@ -33,6 +37,25 @@ · 18 unmodified lines | |||
| 33 | --color-sidebar-foreground: var(--sidebar-foreground); | 37 | --color-sidebar-foreground: var(--sidebar-foreground); |
| 34 | --color-sidebar-border: var(--sidebar-border); | 38 | --color-sidebar-border: var(--sidebar-border); |
| 35 | --color-sidebar-active: var(--sidebar-active); | 39 | --color-sidebar-active: var(--sidebar-active); |
| 40 | --color-sidebar-ring: var(--sidebar-ring); | ||
| 41 | --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); | ||
| 42 | --color-sidebar-accent: var(--sidebar-accent); | ||
| 43 | --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); | ||
| 44 | --color-sidebar-primary: var(--sidebar-primary); | ||
| 45 | |||
| 46 | --color-chart-5: var(--chart-5); | ||
| 47 | --color-chart-4: var(--chart-4); | ||
| 48 | --color-chart-3: var(--chart-3); | ||
| 49 | --color-chart-2: var(--chart-2); | ||
| 50 | --color-chart-1: var(--chart-1); | ||
| 51 | |||
| 52 | --radius-sm: calc(var(--radius) * 0.6); | ||
| 53 | --radius-md: calc(var(--radius) * 0.8); | ||
| 54 | --radius-lg: var(--radius); | ||
| 55 | --radius-xl: calc(var(--radius) * 1.4); | ||
| 56 | --radius-2xl: calc(var(--radius) * 1.8); | ||
| 57 | --radius-3xl: calc(var(--radius) * 2.2); | ||
| 58 | --radius-4xl: calc(var(--radius) * 2.6); | ||
| 36 | } | 59 | } |
| 37 | 60 | ||
| 38 | /* | 61 | /* |
| @@ -44,6 +67,8 @@ · 5 unmodified lines | |||
| 44 | /* ——— Light theme (default) ——— */ | 67 | /* ——— Light theme (default) ——— */ |
| 45 | :root { | 68 | :root { |
| 46 | color-scheme: light dark; | 69 | color-scheme: light dark; |
| 70 | --radius: 0.625rem; | ||
| 71 | |||
| 47 | --background: oklch(0.985 0.002 260); | 72 | --background: oklch(0.985 0.002 260); |
| 48 | --foreground: oklch(0.145 0.005 260); | 73 | --foreground: oklch(0.145 0.005 260); |
| 49 | --card: oklch(0.99 0.001 260); | 74 | --card: oklch(0.99 0.001 260); |
| @@ -67,6 +92,17 @@ · 17 unmodified lines | |||
| 67 | --sidebar-foreground: oklch(0.32 0.008 260); | 92 | --sidebar-foreground: oklch(0.32 0.008 260); |
| 68 | --sidebar-border: oklch(0.90 0.005 260); | 93 | --sidebar-border: oklch(0.90 0.005 260); |
| 69 | --sidebar-active: oklch(0.935 0.006 260); | 94 | --sidebar-active: oklch(0.935 0.006 260); |
| 95 | --sidebar-primary: oklch(0.55 0.17 175); | ||
| 96 | --sidebar-primary-foreground: oklch(0.98 0.005 175); | ||
| 97 | --sidebar-accent: oklch(0.94 0.006 260); | ||
| 98 | --sidebar-accent-foreground: oklch(0.145 0.005 260); | ||
| 99 | --sidebar-ring: oklch(0.55 0.17 175); | ||
| 100 | |||
| 101 | --chart-1: oklch(0.55 0.17 175); | ||
| 102 | --chart-2: oklch(0.52 0.16 230); | ||
| 103 | --chart-3: oklch(0.58 0.16 85); | ||
| 104 | --chart-4: oklch(0.55 0.22 25); | ||
| 105 | --chart-5: oklch(0.50 0.01 250); | ||
| 70 | 106 | ||
| 71 | /* Method colors */ | 107 | /* Method colors */ |
| 72 | --method-get: oklch(0.55 0.18 155); | 108 | --method-get: oklch(0.55 0.18 155); |
| @@ -104,6 +140,17 @@ · 31 unmodified lines | |||
| 104 | --sidebar-foreground: oklch(0.72 0.008 250); | 140 | --sidebar-foreground: oklch(0.72 0.008 250); |
| 105 | --sidebar-border: oklch(0.20 0.006 260); | 141 | --sidebar-border: oklch(0.20 0.006 260); |
| 106 | --sidebar-active: oklch(0.18 0.008 260); | 142 | --sidebar-active: oklch(0.18 0.008 260); |
| 143 | --sidebar-primary: oklch(0.72 0.15 175); | ||
| 144 | --sidebar-primary-foreground: oklch(0.12 0.01 175); | ||
| 145 | --sidebar-accent: oklch(0.195 0.008 260); | ||
| 146 | --sidebar-accent-foreground: oklch(0.90 0.008 250); | ||
| 147 | --sidebar-ring: oklch(0.72 0.15 175); | ||
| 148 | |||
| 149 | --chart-1: oklch(0.72 0.15 175); | ||
| 150 | --chart-2: oklch(0.72 0.14 230); | ||
| 151 | --chart-3: oklch(0.78 0.14 85); | ||
| 152 | --chart-4: oklch(0.70 0.18 25); | ||
| 153 | --chart-5: oklch(0.56 0.01 250); | ||
| 107 | 154 | ||
| 108 | /* Method colors */ | 155 | /* Method colors */ |
| 109 | --method-get: oklch(0.75 0.16 155); | 156 | --method-get: oklch(0.75 0.16 155); |
| @@ -118,7 +165,7 @@ · 8 unmodified lines | |||
| 118 | 165 | ||
| 119 | @layer base { | 166 | @layer base { |
| 120 | * { | 167 | * { |
| 121 | @apply border-border; | 168 | @apply border-border outline-ring/50; |
| 122 | } | 169 | } |
| 123 | 170 | ||
| 124 | html, | 171 | html, |
| @@ -1,6 +1,6 @@ | |||
| 1 | import { clsx, type ClassValue } from "clsx"; | 1 | import { clsx, type ClassValue } from "clsx" |
| 2 | import { twMerge } from "tailwind-merge"; | 2 | import { twMerge } from "tailwind-merge" |
| 3 | 3 | ||
| 4 | export function cn(...inputs: ReadonlyArray<ClassValue>): string { | 4 | export function cn(...inputs: ClassValue[]) { |
| 5 | return twMerge(clsx(inputs)); | 5 | return twMerge(clsx(inputs)) |
| 6 | } | 6 | } |
| @@ -1,6 +1,10 @@ | |||
| 1 | import { useState, type FormEvent } from "react"; | 1 | import { useState, type FormEvent } from "react"; |
| 2 | import { Link, useNavigate } from "@tanstack/react-router"; | 2 | import { Link, useNavigate } from "@tanstack/react-router"; |
| 3 | import { | 3 | import { |
| 4 | Alert, | ||
| 5 | Button, | ||
| 6 | Card, | ||
| 7 | Input, | ||
| 4 | ExecutorPluginRouteProvider, | 8 | ExecutorPluginRouteProvider, |
| 5 | createSourcePluginPaths, | 9 | createSourcePluginPaths, |
| 6 | type ExecutorPluginNavigation, | 10 | type ExecutorPluginNavigation, |
| @@ -61,7 +65,7 @@ const SourceQuickEntry = () => { · 54 unmodified lines | |||
| 61 | }; | 65 | }; |
| 62 | 66 | ||
| 63 | return ( | 67 | return ( |
| 64 | <div className="rounded-2xl border border-border bg-card p-6"> | 68 | <Card className="rounded-2xl"> |
| 65 | <h2 className="font-display text-lg font-semibold tracking-tight text-foreground"> | 69 | <h2 className="font-display text-lg font-semibold tracking-tight text-foreground"> |
| 66 | Quick add | 70 | Quick add |
| 67 | </h2> | 71 | </h2> |
| @@ -71,27 +75,24 @@ const SourceQuickEntry = () => { · 3 unmodified lines | |||
| 71 | 75 | ||
| 72 | <form onSubmit={handleSubmit} className="mt-4"> | 76 | <form onSubmit={handleSubmit} className="mt-4"> |
| 73 | <div className="flex flex-col gap-3 sm:flex-row"> | 77 | <div className="flex flex-col gap-3 sm:flex-row"> |
| 74 | <input | 78 | <Input |
| 75 | value={value} | 79 | value={value} |
| 76 | onChange={(event) => setValue(event.target.value)} | 80 | onChange={(event) => setValue(event.target.value)} |
| 77 | placeholder="https://api.github.com/graphql or npx -y chrome-devtools-mcp@latest" | 81 | placeholder="https://api.github.com/graphql or npx -y chrome-devtools-mcp@latest" |
| 78 | className="h-10 flex-1 rounded-lg border border-input bg-background px-3.5 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/45 focus:border-ring focus:ring-1 focus:ring-ring/25" | 82 | className="h-10 flex-1 px-3.5 text-sm" |
| 79 | /> | 83 | /> |
| 80 | <button | 84 | <Button type="submit" className="h-10"> |
| 81 | type="submit" | ||
| 82 | className="inline-flex h-10 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90" | ||
| 83 | > | ||
| 84 | Add source | 85 | Add source |
| 85 | </button> | 86 | </Button> |
| 86 | </div> | 87 | </div> |
| 87 | 88 | ||
| 88 | {error && ( | 89 | {error && ( |
| 89 | <div className="mt-3 rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-sm text-destructive"> | 90 | <Alert variant="destructive" className="mt-3"> |
| 90 | {error} | 91 | {error} |
| 91 | </div> | 92 | </Alert> |
| 92 | )} | 93 | )} |
| 93 | </form> | 94 | </form> |
| 94 | </div> | 95 | </Card> |
| 95 | ); | 96 | ); |
| 96 | }; | 97 | }; |
| 97 | 98 | ||
| @@ -4,8 +4,7 @@ import { sourcePluginsIndexPath } from "@executor/react/plugins"; · 3 unmodified lines | |||
| 4 | import { LoadableBlock } from "../components/loadable"; | 4 | import { LoadableBlock } from "../components/loadable"; |
| 5 | import { LocalMcpInstallCard } from "../components/local-mcp-install-card"; | 5 | import { LocalMcpInstallCard } from "../components/local-mcp-install-card"; |
| 6 | import { SourceFavicon } from "../components/source-favicon"; | 6 | import { SourceFavicon } from "../components/source-favicon"; |
| 7 | import { Badge } from "../components/ui/badge"; | 7 | import { Alert, Badge, Button, Card } from "@executor/react/plugins"; |
| 8 | import { Button } from "../components/ui/button"; | ||
| 9 | import { IconSources, IconPlus } from "../components/icons"; | 8 | import { IconSources, IconPlus } from "../components/icons"; |
| 10 | import { | 9 | import { |
| 11 | getSourceFrontendPaths, | 10 | getSourceFrontendPaths, |
| @@ -48,9 +47,9 @@ export function HomePage() { · 36 unmodified lines | |||
| 48 | <LoadableBlock loadable={sources} loading="Loading sources..."> | 47 | <LoadableBlock loadable={sources} loading="Loading sources..."> |
| 49 | {(items) => | 48 | {(items) => |
| 50 | !Array.isArray(items) ? ( | 49 | !Array.isArray(items) ? ( |
| 51 | <div className="rounded-xl border border-destructive/20 bg-destructive/5 px-5 py-4 text-sm text-destructive"> | 50 | <Alert variant="destructive" className="px-5 py-4"> |
| 52 | Sources returned an unexpected payload. | 51 | Sources returned an unexpected payload. |
| 53 | </div> | 52 | </Alert> |
| 54 | ) : items.length === 0 ? ( | 53 | ) : items.length === 0 ? ( |
| 55 | <div className="flex flex-col items-center justify-center rounded-2xl border border-dashed border-border py-20"> | 54 | <div className="flex flex-col items-center justify-center rounded-2xl border border-dashed border-border py-20"> |
| 56 | <div className="flex size-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground mb-4"> | 55 | <div className="flex size-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground mb-4"> |
| @@ -74,7 +73,7 @@ export function HomePage() { · 17 unmodified lines | |||
| 74 | {items.map((source) => { | 73 | {items.map((source) => { |
| 75 | const paths = getSourceFrontendPaths(source.kind); | 74 | const paths = getSourceFrontendPaths(source.kind); |
| 76 | const card = ( | 75 | const card = ( |
| 77 | <div className="flex h-full flex-col rounded-2xl border border-border bg-card px-5 py-4 transition-colors hover:border-primary/25 hover:bg-card/90"> | 76 | <Card className="flex h-full flex-col rounded-2xl px-5 py-4 transition-colors hover:border-primary/25 hover:bg-card/90"> |
| 78 | <div className="flex items-start gap-3"> | 77 | <div className="flex items-start gap-3"> |
| 79 | <div className="flex size-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground"> | 78 | <div className="flex size-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground"> |
| 80 | <SourceFavicon source={source} className="size-4" /> | 79 | <SourceFavicon source={source} className="size-4" /> |
| @@ -93,7 +92,7 @@ export function HomePage() { · 12 unmodified lines | |||
| 93 | </div> | 92 | </div> |
| 94 | </div> | 93 | </div> |
| 95 | </div> | 94 | </div> |
| 96 | </div> | 95 | </Card> |
| 97 | ); | 96 | ); |
| 98 | 97 | ||
| 99 | if (!paths) { | 98 | if (!paths) { |
| @@ -19,8 +19,15 @@ import { · 18 unmodified lines | |||
| 19 | } from "@executor/react"; | 19 | } from "@executor/react"; |
| 20 | 20 | ||
| 21 | import { LoadableBlock } from "../components/loadable"; | 21 | import { LoadableBlock } from "../components/loadable"; |
| 22 | import { Badge } from "../components/ui/badge"; | 22 | import { Badge } from "@executor/react/plugins"; |
| 23 | import { Button } from "../components/ui/button"; | 23 | import { |
| 24 | Alert, | ||
| 25 | Button, | ||
| 26 | Card, | ||
| 27 | Input, | ||
| 28 | Label, | ||
| 29 | Select, | ||
| 30 | } from "@executor/react/plugins"; | ||
| 24 | import { | 31 | import { |
| 25 | IconPencil, | 32 | IconPencil, |
| 26 | IconPlus, | 33 | IconPlus, |
| @@ -194,7 +201,7 @@ export function SecretsPage() { · 167 unmodified lines | |||
| 194 | }} | 201 | }} |
| 195 | /> | 202 | /> |
| 196 | ) : ( | 203 | ) : ( |
| 197 | <div className="overflow-hidden rounded-xl border border-border bg-card/80"> | 204 | <Card className="overflow-hidden p-0"> |
| 198 | {items.map((secret, index) => ( | 205 | {items.map((secret, index) => ( |
| 199 | <div | 206 | <div |
| 200 | key={secret.id} | 207 | key={secret.id} |
| @@ -212,7 +219,7 @@ export function SecretsPage() { · 11 unmodified lines | |||
| 212 | /> | 219 | /> |
| 213 | </div> | 220 | </div> |
| 214 | ))} | 221 | ))} |
| 215 | </div> | 222 | </Card> |
| 216 | ) | 223 | ) |
| 217 | } | 224 | } |
| 218 | </LoadableBlock> | 225 | </LoadableBlock> |
| @@ -283,29 +290,29 @@ function CreateSecretStoreForm(props: { · 64 unmodified lines | |||
| 283 | ) : ( | 290 | ) : ( |
| 284 | <> | 291 | <> |
| 285 | <div className="grid gap-4 sm:grid-cols-2"> | 292 | <div className="grid gap-4 sm:grid-cols-2"> |
| 286 | <FieldLabel label="Store type"> | 293 | <div className="grid gap-2"> |
| 287 | <select | 294 | <Label>Store type</Label> |
| 295 | <Select | ||
| 288 | value={kind} | 296 | value={kind} |
| 289 | onChange={(event) => setKind(event.target.value)} | 297 | onChange={(event) => setKind(event.target.value)} |
| 290 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 291 | > | 298 | > |
| 292 | {props.pluginOptions.map((plugin) => ( | 299 | {props.pluginOptions.map((plugin) => ( |
| 293 | <option key={plugin.kind} value={plugin.kind}> | 300 | <option key={plugin.kind} value={plugin.kind}> |
| 294 | {plugin.displayName} | 301 | {plugin.displayName} |
| 295 | </option> | 302 | </option> |
| 296 | ))} | 303 | ))} |
| 297 | </select> | 304 | </Select> |
| 298 | </FieldLabel> | 305 | </div> |
| 299 | {!StoreCreateForm && ( | 306 | {!StoreCreateForm && ( |
| 300 | <FieldLabel label="Name"> | 307 | <div className="grid gap-2"> |
| 301 | <input | 308 | <Label>Name</Label> |
| 309 | <Input | ||
| 302 | value={name} | 310 | value={name} |
| 303 | onChange={(event) => setName(event.target.value)} | 311 | onChange={(event) => setName(event.target.value)} |
| 304 | placeholder="Secret store" | 312 | placeholder="Secret store" |
| 305 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 306 | autoFocus | 313 | autoFocus |
| 307 | /> | 314 | /> |
| 308 | </FieldLabel> | 315 | </div> |
| 309 | )} | 316 | )} |
| 310 | </div> | 317 | </div> |
| 311 | 318 | ||
| @@ -582,50 +589,51 @@ function CreateSecretForm(props: { · 270 unmodified lines | |||
| 582 | > | 589 | > |
| 583 | {error && <ErrorBanner>{error}</ErrorBanner>} | 590 | {error && <ErrorBanner>{error}</ErrorBanner>} |
| 584 | <div className="grid gap-4 sm:grid-cols-2"> | 591 | <div className="grid gap-4 sm:grid-cols-2"> |
| 585 | <FieldLabel label="Store"> | 592 | <div className="grid gap-2"> |
| 586 | <select | 593 | <Label>Store</Label> |
| 594 | <Select | ||
| 587 | value={storeId} | 595 | value={storeId} |
| 588 | onChange={(event) => setStoreId(event.target.value)} | 596 | onChange={(event) => setStoreId(event.target.value)} |
| 589 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 590 | > | 597 | > |
| 591 | {props.storeOptions.map((store) => ( | 598 | {props.storeOptions.map((store) => ( |
| 592 | <option key={store.id} value={store.id}> | 599 | <option key={store.id} value={store.id}> |
| 593 | {store.name} | 600 | {store.name} |
| 594 | </option> | 601 | </option> |
| 595 | ))} | 602 | ))} |
| 596 | </select> | 603 | </Select> |
| 597 | </FieldLabel> | 604 | </div> |
| 598 | {canImportSecrets && canCreateSecrets && ( | 605 | {canImportSecrets && canCreateSecrets && ( |
| 599 | <FieldLabel label="Mode"> | 606 | <div className="grid gap-2"> |
| 600 | <select | 607 | <Label>Mode</Label> |
| 608 | <Select | ||
| 601 | value={mode} | 609 | value={mode} |
| 602 | onChange={(event) => setMode(event.target.value as "create" | "import")} | 610 | onChange={(event) => setMode(event.target.value as "create" | "import")} |
| 603 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 604 | > | 611 | > |
| 605 | <option value="import">Import from store</option> | 612 | <option value="import">Import from store</option> |
| 606 | <option value="create">Create new secret</option> | 613 | <option value="create">Create new secret</option> |
| 607 | </select> | 614 | </Select> |
| 608 | </FieldLabel> | 615 | </div> |
| 609 | )} | 616 | )} |
| 610 | <FieldLabel label="Name"> | 617 | <div className="grid gap-2"> |
| 611 | <input | 618 | <Label>Name</Label> |
| 619 | <Input | ||
| 612 | value={name} | 620 | value={name} |
| 613 | onChange={(event) => setName(event.target.value)} | 621 | onChange={(event) => setName(event.target.value)} |
| 614 | placeholder={mode === "import" ? "Optional override name" : "GitHub PAT"} | 622 | placeholder={mode === "import" ? "Optional override name" : "GitHub PAT"} |
| 615 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 616 | autoFocus | 623 | autoFocus |
| 617 | /> | 624 | /> |
| 618 | </FieldLabel> | 625 | </div> |
| 619 | {mode === "create" && ( | 626 | {mode === "create" && ( |
| 620 | <FieldLabel label="Value"> | 627 | <div className="grid gap-2"> |
| 621 | <input | 628 | <Label>Value</Label> |
| 629 | <Input | ||
| 622 | type="password" | 630 | type="password" |
| 623 | value={value} | 631 | value={value} |
| 624 | onChange={(event) => setValue(event.target.value)} | 632 | onChange={(event) => setValue(event.target.value)} |
| 625 | placeholder="ghp_..." | 633 | placeholder="ghp_..." |
| 626 | className="h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | 634 | className="font-mono text-[12px]" |
| 627 | /> | 635 | /> |
| 628 | </FieldLabel> | 636 | </div> |
| 629 | )} | 637 | )} |
| 630 | </div> | 638 | </div> |
| 631 | {mode === "import" && canImportSecrets && ( | 639 | {mode === "import" && canImportSecrets && ( |
| @@ -644,11 +652,11 @@ function CreateSecretForm(props: { · 12 unmodified lines | |||
| 644 | Back | 652 | Back |
| 645 | </Button> | 653 | </Button> |
| 646 | )} | 654 | )} |
| 647 | <input | 655 | <Input |
| 648 | value={browserQuery} | 656 | value={browserQuery} |
| 649 | onChange={(event) => setBrowserQuery(event.target.value)} | 657 | onChange={(event) => setBrowserQuery(event.target.value)} |
| 650 | placeholder="Search this store" | 658 | placeholder="Search this store" |
| 651 | className="h-9 min-w-0 flex-1 rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | 659 | className="min-w-0 flex-1" |
| 652 | /> | 660 | /> |
| 653 | </div> | 661 | </div> |
| 654 | {browserStack.length > 0 && ( | 662 | {browserStack.length > 0 && ( |
| @@ -673,12 +681,12 @@ function CreateSecretForm(props: { · 18 unmodified lines | |||
| 673 | </div> | 681 | </div> |
| 674 | ) : ( | 682 | ) : ( |
| 675 | browserEntries.map((entry, index) => ( | 683 | browserEntries.map((entry, index) => ( |
| 676 | <button | 684 | <Button |
| 677 | key={entry.key} | 685 | key={entry.key} |
| 678 | type="button" | 686 | variant="ghost" |
| 679 | onClick={() => handleBrowserEntryClick(entry)} | 687 | onClick={() => handleBrowserEntryClick(entry)} |
| 680 | className={cn( | 688 | className={cn( |
| 681 | "flex w-full items-center justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-accent/50", | 689 | "flex h-auto w-full items-center justify-between gap-3 rounded-none px-4 py-3 text-left", |
| 682 | index > 0 && "border-t border-border", | 690 | index > 0 && "border-t border-border", |
| 683 | selectedImportKey === entry.key && "bg-accent/60", | 691 | selectedImportKey === entry.key && "bg-accent/60", |
| 684 | )} | 692 | )} |
| @@ -696,7 +704,7 @@ function CreateSecretForm(props: { · 11 unmodified lines | |||
| 696 | <Badge variant="outline"> | 704 | <Badge variant="outline"> |
| 697 | {entry.kind === "group" ? "Open" : "Secret"} | 705 | {entry.kind === "group" ? "Open" : "Secret"} |
| 698 | </Badge> | 706 | </Badge> |
| 699 | </button> | 707 | </Button> |
| 700 | )) | 708 | )) |
| 701 | )} | 709 | )} |
| 702 | </div> | 710 | </div> |
| @@ -742,7 +750,7 @@ function SecretStoreCard(props: { · 39 unmodified lines | |||
| 742 | }; | 750 | }; |
| 743 | 751 | ||
| 744 | return ( | 752 | return ( |
| 745 | <div className="rounded-xl border border-border bg-card/80 p-4"> | 753 | <Card className="p-4"> |
| 746 | <div className="flex items-start justify-between gap-3"> | 754 | <div className="flex items-start justify-between gap-3"> |
| 747 | <div className="min-w-0"> | 755 | <div className="min-w-0"> |
| 748 | <div className="flex flex-wrap items-center gap-2"> | 756 | <div className="flex flex-wrap items-center gap-2"> |
| @@ -764,40 +772,41 @@ function SecretStoreCard(props: { · 15 unmodified lines | |||
| 764 | {props.canManage ? ( | 772 | {props.canManage ? ( |
| 765 | confirmDelete ? ( | 773 | confirmDelete ? ( |
| 766 | <div className="flex items-center gap-1"> | 774 | <div className="flex items-center gap-1"> |
| 767 | <button | 775 | <Button |
| 768 | type="button" | 776 | variant="ghost" |
| 777 | size="sm" | ||
| 769 | onClick={() => setConfirmDelete(false)} | 778 | onClick={() => setConfirmDelete(false)} |
| 770 | disabled={isDeleting} | 779 | disabled={isDeleting} |
| 771 | className="rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground disabled:opacity-50" | ||
| 772 | > | 780 | > |
| 773 | Cancel | 781 | Cancel |
| 774 | </button> | 782 | </Button> |
| 775 | <button | 783 | <Button |
| 776 | type="button" | 784 | variant="destructive-outline" |
| 785 | size="sm" | ||
| 777 | onClick={() => { | 786 | onClick={() => { |
| 778 | void handleDelete(); | 787 | void handleDelete(); |
| 779 | }} | 788 | }} |
| 780 | disabled={isDeleting} | 789 | disabled={isDeleting} |
| 781 | className="inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium text-destructive transition-colors hover:bg-destructive/8 disabled:opacity-50" | ||
| 782 | > | 790 | > |
| 783 | {isDeleting | 791 | {isDeleting |
| 784 | ? <IconSpinner className="size-3" /> | 792 | ? <IconSpinner className="size-3" /> |
| 785 | : <IconTrash className="size-3" />} | 793 | : <IconTrash className="size-3" />} |
| 786 | Delete | 794 | Delete |
| 787 | </button> | 795 | </Button> |
| 788 | </div> | 796 | </div> |
| 789 | ) : ( | 797 | ) : ( |
| 790 | <button | 798 | <Button |
| 791 | type="button" | 799 | variant="ghost" |
| 800 | size="sm" | ||
| 792 | onClick={() => setConfirmDelete(true)} | 801 | onClick={() => setConfirmDelete(true)} |
| 793 | disabled={isDeleting} | 802 | disabled={isDeleting} |
| 794 | className="inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-destructive/8 hover:text-destructive disabled:opacity-50" | 803 | className="text-muted-foreground hover:bg-destructive/8 hover:text-destructive" |
| 795 | > | 804 | > |
| 796 | {isDeleting | 805 | {isDeleting |
| 797 | ? <IconSpinner className="size-3" /> | 806 | ? <IconSpinner className="size-3" /> |
| 798 | : <IconTrash className="size-3" />} | 807 | : <IconTrash className="size-3" />} |
| 799 | Remove | 808 | Remove |
| 800 | </button> | 809 | </Button> |
| 801 | ) | 810 | ) |
| 802 | ) : ( | 811 | ) : ( |
| 803 | <span className="text-[10px] font-medium uppercase tracking-[0.12em] text-muted-foreground/45"> | 812 | <span className="text-[10px] font-medium uppercase tracking-[0.12em] text-muted-foreground/45"> |
| @@ -805,7 +814,7 @@ function SecretStoreCard(props: { · 1 unmodified line | |||
| 805 | </span> | 814 | </span> |
| 806 | )} | 815 | )} |
| 807 | </div> | 816 | </div> |
| 808 | </div> | 817 | </Card> |
| 809 | ); | 818 | ); |
| 810 | } | 819 | } |
| 811 | 820 | ||
| @@ -868,11 +877,11 @@ function SecretRow(props: { · 56 unmodified lines | |||
| 868 | )} | 877 | )} |
| 869 | </div> | 878 | </div> |
| 870 | <div className="flex shrink-0 items-center gap-1.5"> | 879 | <div className="flex shrink-0 items-center gap-1.5"> |
| 871 | <button | 880 | <Button |
| 872 | type="button" | 881 | variant="ghost" |
| 882 | size="sm" | ||
| 873 | onClick={props.onEdit} | 883 | onClick={props.onEdit} |
| 874 | className={cn( | 884 | className={cn( |
| 875 | "inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-medium transition-colors", | ||
| 876 | props.isEditing | 885 | props.isEditing |
| 877 | ? "bg-primary/10 text-primary" | 886 | ? "bg-primary/10 text-primary" |
| 878 | : "text-muted-foreground hover:bg-accent/50 hover:text-foreground", | 887 | : "text-muted-foreground hover:bg-accent/50 hover:text-foreground", |
| @@ -880,43 +889,44 @@ function SecretRow(props: { · 1 unmodified line | |||
| 880 | > | 889 | > |
| 881 | <IconPencil className="size-3" /> | 890 | <IconPencil className="size-3" /> |
| 882 | Edit | 891 | Edit |
| 883 | </button> | 892 | </Button> |
| 884 | {confirmDelete ? ( | 893 | {confirmDelete ? ( |
| 885 | <> | 894 | <> |
| 886 | <button | 895 | <Button |
| 887 | type="button" | 896 | variant="ghost" |
| 897 | size="sm" | ||
| 888 | onClick={() => setConfirmDelete(false)} | 898 | onClick={() => setConfirmDelete(false)} |
| 889 | disabled={isDeleting} | 899 | disabled={isDeleting} |
| 890 | className="rounded-md px-2 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground disabled:opacity-50" | ||
| 891 | > | 900 | > |
| 892 | Cancel | 901 | Cancel |
| 893 | </button> | 902 | </Button> |
| 894 | <button | 903 | <Button |
| 895 | type="button" | 904 | variant="destructive-outline" |
| 905 | size="sm" | ||
| 896 | onClick={() => { | 906 | onClick={() => { |
| 897 | void handleDelete(); | 907 | void handleDelete(); |
| 898 | }} | 908 | }} |
| 899 | disabled={isDeleting} | 909 | disabled={isDeleting} |
| 900 | className="inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-medium text-destructive transition-colors hover:bg-destructive/8 disabled:opacity-50" | ||
| 901 | > | 910 | > |
| 902 | {isDeleting | 911 | {isDeleting |
| 903 | ? <IconSpinner className="size-3" /> | 912 | ? <IconSpinner className="size-3" /> |
| 904 | : <IconTrash className="size-3" />} | 913 | : <IconTrash className="size-3" />} |
| 905 | Delete | 914 | Delete |
| 906 | </button> | 915 | </Button> |
| 907 | </> | 916 | </> |
| 908 | ) : ( | 917 | ) : ( |
| 909 | <button | 918 | <Button |
| 910 | type="button" | 919 | variant="ghost" |
| 920 | size="sm" | ||
| 911 | onClick={() => setConfirmDelete(true)} | 921 | onClick={() => setConfirmDelete(true)} |
| 912 | disabled={isDeleting} | 922 | disabled={isDeleting} |
| 913 | className="inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-destructive/8 hover:text-destructive disabled:opacity-50" | 923 | className="text-muted-foreground hover:bg-destructive/8 hover:text-destructive" |
| 914 | > | 924 | > |
| 915 | {isDeleting | 925 | {isDeleting |
| 916 | ? <IconSpinner className="size-3" /> | 926 | ? <IconSpinner className="size-3" /> |
| 917 | : <IconTrash className="size-3" />} | 927 | : <IconTrash className="size-3" />} |
| 918 | Delete | 928 | Delete |
| 919 | </button> | 929 | </Button> |
| 920 | )} | 930 | )} |
| 921 | </div> | 931 | </div> |
| 922 | </div> | 932 | </div> |
| @@ -968,33 +978,35 @@ function EditSecretForm(props: { · 45 unmodified lines | |||
| 968 | <div className="mt-3 border-t border-border/50 pt-3"> | 978 | <div className="mt-3 border-t border-border/50 pt-3"> |
| 969 | {error && <ErrorBanner className="mb-3">{error}</ErrorBanner>} | 979 | {error && <ErrorBanner className="mb-3">{error}</ErrorBanner>} |
| 970 | <div className="grid gap-3 sm:grid-cols-2"> | 980 | <div className="grid gap-3 sm:grid-cols-2"> |
| 971 | <FieldLabel label="Name"> | 981 | <div className="grid gap-2"> |
| 972 | <input | 982 | <Label>Name</Label> |
| 983 | <Input | ||
| 973 | value={name} | 984 | value={name} |
| 974 | onChange={(event) => setName(event.target.value)} | 985 | onChange={(event) => setName(event.target.value)} |
| 975 | placeholder="Secret name" | 986 | placeholder="Secret name" |
| 976 | className="h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | 987 | className="h-8 text-[12px]" |
| 977 | autoFocus | 988 | autoFocus |
| 978 | /> | 989 | /> |
| 979 | </FieldLabel> | 990 | </div> |
| 980 | <FieldLabel label="New value"> | 991 | <div className="grid gap-2"> |
| 981 | <input | 992 | <Label>New value</Label> |
| 993 | <Input | ||
| 982 | type="password" | 994 | type="password" |
| 983 | value={value} | 995 | value={value} |
| 984 | onChange={(event) => setValue(event.target.value)} | 996 | onChange={(event) => setValue(event.target.value)} |
| 985 | placeholder="Leave empty to keep existing" | 997 | placeholder="Leave empty to keep existing" |
| 986 | className="h-8 w-full rounded-lg border border-input bg-background px-3 font-mono text-[11px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25" | 998 | className="h-8 font-mono text-[11px]" |
| 987 | /> | 999 | /> |
| 988 | </FieldLabel> | 1000 | </div> |
| 989 | </div> | 1001 | </div> |
| 990 | <div className="mt-3 flex items-center justify-end gap-2"> | 1002 | <div className="mt-3 flex items-center justify-end gap-2"> |
| 991 | <button | 1003 | <Button |
| 992 | type="button" | 1004 | variant="ghost" |
| 1005 | size="sm" | ||
| 993 | onClick={props.onClose} | 1006 | onClick={props.onClose} |
| 994 | className="rounded-md px-3 py-1.5 text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground" | ||
| 995 | > | 1007 | > |
| 996 | Cancel | 1008 | Cancel |
| 997 | </button> | 1009 | </Button> |
| 998 | <Button | 1010 | <Button |
| 999 | size="sm" | 1011 | size="sm" |
| 1000 | onClick={handleSubmit} | 1012 | onClick={handleSubmit} |
| @@ -1015,19 +1027,19 @@ function FormCard(props: { · 14 unmodified lines | |||
| 1015 | children: ReactNode; | 1027 | children: ReactNode; |
| 1016 | }) { | 1028 | }) { |
| 1017 | return ( | 1029 | return ( |
| 1018 | <div className={cn("rounded-xl border border-primary/20 bg-card/80", props.className)}> | 1030 | <Card className={cn("border-primary/20 p-0", props.className)}> |
| 1019 | <div className="flex items-center justify-between border-b border-border px-5 py-3"> | 1031 | <div className="flex items-center justify-between border-b border-border px-5 py-3"> |
| 1020 | <h3 className="text-sm font-semibold text-foreground">{props.title}</h3> | 1032 | <h3 className="text-sm font-semibold text-foreground">{props.title}</h3> |
| 1021 | <button | 1033 | <Button |
| 1022 | type="button" | 1034 | variant="ghost" |
| 1035 | size="sm" | ||
| 1023 | onClick={props.onClose} | 1036 | onClick={props.onClose} |
| 1024 | className="text-[12px] text-muted-foreground transition-colors hover:text-foreground" | ||
| 1025 | > | 1037 | > |
| 1026 | Cancel | 1038 | Cancel |
| 1027 | </button> | 1039 | </Button> |
| 1028 | </div> | 1040 | </div> |
| 1029 | <div className="space-y-4 p-5">{props.children}</div> | 1041 | <div className="space-y-4 p-5">{props.children}</div> |
| 1030 | </div> | 1042 | </Card> |
| 1031 | ); | 1043 | ); |
| 1032 | } | 1044 | } |
| 1033 | 1045 | ||
| @@ -1036,14 +1048,9 @@ function ErrorBanner(props: { · 2 unmodified lines | |||
| 1036 | className?: string; | 1048 | className?: string; |
| 1037 | }) { | 1049 | }) { |
| 1038 | return ( | 1050 | return ( |
| 1039 | <div | 1051 | <Alert variant="destructive" className={cn("text-[13px]", props.className)}> |
| 1040 | className={cn( | ||
| 1041 | "rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-[13px] text-destructive", | ||
| 1042 | props.className, | ||
| 1043 | )} | ||
| 1044 | > | ||
| 1045 | {props.children} | 1052 | {props.children} |
| 1046 | </div> | 1053 | </Alert> |
| 1047 | ); | 1054 | ); |
| 1048 | } | 1055 | } |
| 1049 | 1056 | ||
| @@ -1069,20 +1076,6 @@ function SectionEmptyState(props: { · 19 unmodified lines | |||
| 1069 | ); | 1076 | ); |
| 1070 | } | 1077 | } |
| 1071 | 1078 | ||
| 1072 | function FieldLabel(props: { | ||
| 1073 | label: string; | ||
| 1074 | children: ReactNode; | ||
| 1075 | }) { | ||
| 1076 | return ( | ||
| 1077 | <label className="block space-y-1"> | ||
| 1078 | <span className="text-[11px] font-medium text-muted-foreground"> | ||
| 1079 | {props.label} | ||
| 1080 | </span> | ||
| 1081 | {props.children} | ||
| 1082 | </label> | ||
| 1083 | ); | ||
| 1084 | } | ||
| 1085 | |||
| 1086 | const formatDate = (value: number): string => | 1079 | const formatDate = (value: number): string => |
| 1087 | new Date(value).toLocaleDateString(undefined, { | 1080 | new Date(value).toLocaleDateString(undefined, { |
| 1088 | month: "short", | 1081 | month: "short", |
| @@ -8,7 +8,11 @@ · 7 unmodified lines | |||
| 8 | "noEmit": true, | 8 | "noEmit": true, |
| 9 | "lib": ["ES2022", "DOM", "DOM.Iterable"], | 9 | "lib": ["ES2022", "DOM", "DOM.Iterable"], |
| 10 | "jsx": "react-jsx", | 10 | "jsx": "react-jsx", |
| 11 | "types": ["bun-types"] | 11 | "types": ["bun-types"], |
| 12 | "baseUrl": ".", | ||
| 13 | "paths": { | ||
| 14 | "@/*": ["./src/*"] | ||
| 15 | } | ||
| 12 | }, | 16 | }, |
| 13 | "include": [ | 17 | "include": [ |
| 14 | "src/**/*.ts", | 18 | "src/**/*.ts", |
| @@ -1,4 +1,5 @@ | |||
| 1 | import { readFileSync } from "node:fs"; | 1 | import { readFileSync } from "node:fs"; |
| 2 | import path from "node:path"; | ||
| 2 | import { defineConfig } from "vite"; | 3 | import { defineConfig } from "vite"; |
| 3 | import react from "@vitejs/plugin-react"; | 4 | import react from "@vitejs/plugin-react"; |
| 4 | import tailwindcss from "@tailwindcss/vite"; | 5 | import tailwindcss from "@tailwindcss/vite"; |
| @@ -35,6 +36,11 @@ const workspaceExecutorPackages = Object.keys(webPackage.dependencies ?? {}).fil · 30 unmodified lines | |||
| 35 | 36 | ||
| 36 | export default defineConfig({ | 37 | export default defineConfig({ |
| 37 | root: "src", | 38 | root: "src", |
| 39 | resolve: { | ||
| 40 | alias: { | ||
| 41 | "@": path.resolve(import.meta.dirname, "./src"), | ||
| 42 | }, | ||
| 43 | }, | ||
| 38 | plugins: [ | 44 | plugins: [ |
| 39 | tailwindcss(), | 45 | tailwindcss(), |
| 40 | react(), | 46 | react(), |
| @@ -57,6 +57,7 @@ · 56 unmodified lines | |||
| 57 | "name": "@executor/web", | 57 | "name": "@executor/web", |
| 58 | "version": "0.0.0", | 58 | "version": "0.0.0", |
| 59 | "dependencies": { | 59 | "dependencies": { |
| 60 | "@base-ui/react": "^1.3.0", | ||
| 60 | "@executor/plugin-execution-history-react": "workspace:*", | 61 | "@executor/plugin-execution-history-react": "workspace:*", |
| 61 | "@executor/plugin-google-discovery-react": "workspace:*", | 62 | "@executor/plugin-google-discovery-react": "workspace:*", |
| 62 | "@executor/plugin-graphql-react": "workspace:*", | 63 | "@executor/plugin-graphql-react": "workspace:*", |
| @@ -72,9 +73,11 @@ · 9 unmodified lines | |||
| 72 | "class-variance-authority": "^0.7.1", | 73 | "class-variance-authority": "^0.7.1", |
| 73 | "clsx": "^2.1.1", | 74 | "clsx": "^2.1.1", |
| 74 | "effect": "catalog:", | 75 | "effect": "catalog:", |
| 76 | "lucide-react": "^1.7.0", | ||
| 75 | "react": "^19.2.0", | 77 | "react": "^19.2.0", |
| 76 | "react-dom": "^19.2.0", | 78 | "react-dom": "^19.2.0", |
| 77 | "react-grab": "^0.1.26", | 79 | "react-grab": "^0.1.26", |
| 80 | "shadcn": "^4.1.1", | ||
| 78 | "shiki": "^4.0.1", | 81 | "shiki": "^4.0.1", |
| 79 | "streamdown": "^2.3.0", | 82 | "streamdown": "^2.3.0", |
| 80 | "tailwind-merge": "^3.5.0", | 83 | "tailwind-merge": "^3.5.0", |
| @@ -132,6 +135,7 @@ · 51 unmodified lines | |||
| 132 | "name": "@executor/react", | 135 | "name": "@executor/react", |
| 133 | "version": "0.0.0", | 136 | "version": "0.0.0", |
| 134 | "dependencies": { | 137 | "dependencies": { |
| 138 | "@base-ui/react": "^1.3.0", | ||
| 135 | "@effect-atom/atom": "0.5.3", | 139 | "@effect-atom/atom": "0.5.3", |
| 136 | "@effect-atom/atom-react": "0.5.0", | 140 | "@effect-atom/atom-react": "0.5.0", |
| 137 | "@effect/platform": "catalog:", | 141 | "@effect/platform": "catalog:", |
| @@ -141,6 +145,7 @@ · 3 unmodified lines | |||
| 141 | "@shikijs/themes": "^4.0.1", | 145 | "@shikijs/themes": "^4.0.1", |
| 142 | "class-variance-authority": "^0.7.1", | 146 | "class-variance-authority": "^0.7.1", |
| 143 | "clsx": "^2.1.1", | 147 | "clsx": "^2.1.1", |
| 148 | "cmdk": "^1.1.1", | ||
| 144 | "effect": "catalog:", | 149 | "effect": "catalog:", |
| 145 | "shiki": "^4.0.1", | 150 | "shiki": "^4.0.1", |
| 146 | "streamdown": "^2.3.0", | 151 | "streamdown": "^2.3.0", |
| @@ -833,16 +838,28 @@ · 686 unmodified lines | |||
| 833 | 838 | ||
| 834 | "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], | 839 | "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], |
| 835 | 840 | ||
| 841 | "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], | ||
| 842 | |||
| 836 | "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], | 843 | "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], |
| 837 | 844 | ||
| 845 | "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], | ||
| 846 | |||
| 838 | "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], | 847 | "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], |
| 839 | 848 | ||
| 849 | "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], | ||
| 850 | |||
| 840 | "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], | 851 | "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], |
| 841 | 852 | ||
| 842 | "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], | 853 | "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], |
| 843 | 854 | ||
| 855 | "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], | ||
| 856 | |||
| 844 | "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], | 857 | "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], |
| 845 | 858 | ||
| 859 | "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], | ||
| 860 | |||
| 861 | "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], | ||
| 862 | |||
| 846 | "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], | 863 | "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], |
| 847 | 864 | ||
| 848 | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], | 865 | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], |
| @@ -853,10 +870,20 @@ · 4 unmodified lines | |||
| 853 | 870 | ||
| 854 | "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], | 871 | "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], |
| 855 | 872 | ||
| 873 | "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], | ||
| 874 | |||
| 875 | "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], | ||
| 876 | |||
| 877 | "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], | ||
| 878 | |||
| 856 | "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], | 879 | "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], |
| 857 | 880 | ||
| 858 | "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], | 881 | "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], |
| 859 | 882 | ||
| 883 | "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw=="], | ||
| 884 | |||
| 885 | "@babel/preset-typescript": ["@babel/preset-typescript@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g=="], | ||
| 886 | |||
| 860 | "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], | 887 | "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], |
| 861 | 888 | ||
| 862 | "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], | 889 | "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], |
| @@ -865,6 +892,10 @@ · 2 unmodified lines | |||
| 865 | 892 | ||
| 866 | "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], | 893 | "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], |
| 867 | 894 | ||
| 895 | "@base-ui/react": ["@base-ui/react@1.3.0", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@base-ui/utils": "0.2.6", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "tabbable": "^6.4.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA=="], | ||
| 896 | |||
| 897 | "@base-ui/utils": ["@base-ui/utils@0.2.6", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw=="], | ||
| 898 | |||
| 868 | "@changesets/apply-release-plan": ["@changesets/apply-release-plan@7.1.0", "", { "dependencies": { "@changesets/config": "^3.1.3", "@changesets/get-version-range-type": "^0.4.0", "@changesets/git": "^3.0.4", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", "lodash.startcase": "^4.4.0", "outdent": "^0.5.0", "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" } }, "sha512-yq8ML3YS7koKQ/9bk1PqO0HMzApIFNwjlwCnwFEXMzNe8NpzeeYYKCmnhWJGkN8g7E51MnWaSbqRcTcdIxUgnQ=="], | 899 | "@changesets/apply-release-plan": ["@changesets/apply-release-plan@7.1.0", "", { "dependencies": { "@changesets/config": "^3.1.3", "@changesets/get-version-range-type": "^0.4.0", "@changesets/git": "^3.0.4", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", "lodash.startcase": "^4.4.0", "outdent": "^0.5.0", "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" } }, "sha512-yq8ML3YS7koKQ/9bk1PqO0HMzApIFNwjlwCnwFEXMzNe8NpzeeYYKCmnhWJGkN8g7E51MnWaSbqRcTcdIxUgnQ=="], |
| 869 | 900 | ||
| 870 | "@changesets/assemble-release-plan": ["@changesets/assemble-release-plan@6.0.9", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "semver": "^7.5.3" } }, "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ=="], | 901 | "@changesets/assemble-release-plan": ["@changesets/assemble-release-plan@6.0.9", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "semver": "^7.5.3" } }, "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ=="], |
| @@ -909,6 +940,10 @@ · 38 unmodified lines | |||
| 909 | 940 | ||
| 910 | "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], | 941 | "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], |
| 911 | 942 | ||
| 943 | "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.59.1", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-Qg+meC+XFxliuVSDlEPkKnaUjdaJKK6FNx/Wwl2UxhQR8pyPIuLhMavsF7ePdB9qFZUWV1jEK3ckbJir/WmF4w=="], | ||
| 944 | |||
| 945 | "@ecies/ciphers": ["@ecies/ciphers@0.2.5", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A=="], | ||
| 946 | |||
| 912 | "@effect-atom/atom": ["@effect-atom/atom@0.5.3", "", { "peerDependencies": { "@effect/experimental": "^0.58.0", "@effect/platform": "^0.94.2", "@effect/rpc": "^0.73.0", "effect": "^3.19.15" } }, "sha512-TRZv/i+YT3TtnN0oFORJqXdxSs1fc7lrJlH+1xZvDFyjC9hgoVnrcKbeZsDFmr6r0wYRqVo7U3IftxiQNjpNZA=="], | 947 | "@effect-atom/atom": ["@effect-atom/atom@0.5.3", "", { "peerDependencies": { "@effect/experimental": "^0.58.0", "@effect/platform": "^0.94.2", "@effect/rpc": "^0.73.0", "effect": "^3.19.15" } }, "sha512-TRZv/i+YT3TtnN0oFORJqXdxSs1fc7lrJlH+1xZvDFyjC9hgoVnrcKbeZsDFmr6r0wYRqVo7U3IftxiQNjpNZA=="], |
| 913 | 948 | ||
| 914 | "@effect-atom/atom-react": ["@effect-atom/atom-react@0.5.0", "", { "dependencies": { "@effect-atom/atom": "^0.5.0" }, "peerDependencies": { "effect": "^3.19", "react": ">=18 <20", "scheduler": "*" } }, "sha512-aFfjWi4rEJCqfM12Oi36/EKaDm/W6n4/N6yM5vL0t/QozKhJhK05rQL/GY4XMxlH2eqkQ4ih8jBQa3Yyp0Fiqw=="], | 949 | "@effect-atom/atom-react": ["@effect-atom/atom-react@0.5.0", "", { "dependencies": { "@effect-atom/atom": "^0.5.0" }, "peerDependencies": { "effect": "^3.19", "react": ">=18 <20", "scheduler": "*" } }, "sha512-aFfjWi4rEJCqfM12Oi36/EKaDm/W6n4/N6yM5vL0t/QozKhJhK05rQL/GY4XMxlH2eqkQ4ih8jBQa3Yyp0Fiqw=="], |
| @@ -1095,6 +1130,14 @@ · 180 unmodified lines | |||
| 1095 | 1130 | ||
| 1096 | "@executor/web": ["@executor/web@workspace:apps/web"], | 1131 | "@executor/web": ["@executor/web@workspace:apps/web"], |
| 1097 | 1132 | ||
| 1133 | "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], | ||
| 1134 | |||
| 1135 | "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], | ||
| 1136 | |||
| 1137 | "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], | ||
| 1138 | |||
| 1139 | "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], | ||
| 1140 | |||
| 1098 | "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], | 1141 | "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], |
| 1099 | 1142 | ||
| 1100 | "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], | 1143 | "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], |
| @@ -1103,8 +1146,18 @@ · 2 unmodified lines | |||
| 1103 | 1146 | ||
| 1104 | "@hono/vite-dev-server": ["@hono/vite-dev-server@0.25.0", "", { "dependencies": { "@hono/node-server": "^1.14.2", "minimatch": "^9.0.3" }, "peerDependencies": { "hono": "*", "miniflare": "*", "wrangler": "*" }, "optionalPeers": ["miniflare", "wrangler"] }, "sha512-4j5rs7yUTOObU2/yCEHeWbf3C8m95SD9lhdUUE6CJ462Emp9vS94yiza2dsA8+ly5pdaIQW0cd4nhNVcwYL5tA=="], | 1147 | "@hono/vite-dev-server": ["@hono/vite-dev-server@0.25.0", "", { "dependencies": { "@hono/node-server": "^1.14.2", "minimatch": "^9.0.3" }, "peerDependencies": { "hono": "*", "miniflare": "*", "wrangler": "*" }, "optionalPeers": ["miniflare", "wrangler"] }, "sha512-4j5rs7yUTOObU2/yCEHeWbf3C8m95SD9lhdUUE6CJ462Emp9vS94yiza2dsA8+ly5pdaIQW0cd4nhNVcwYL5tA=="], |
| 1105 | 1148 | ||
| 1149 | "@inquirer/ansi": ["@inquirer/ansi@1.0.2", "", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="], | ||
| 1150 | |||
| 1151 | "@inquirer/confirm": ["@inquirer/confirm@5.1.21", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ=="], | ||
| 1152 | |||
| 1153 | "@inquirer/core": ["@inquirer/core@10.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A=="], | ||
| 1154 | |||
| 1106 | "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], | 1155 | "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], |
| 1107 | 1156 | ||
| 1157 | "@inquirer/figures": ["@inquirer/figures@1.0.15", "", {}, "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g=="], | ||
| 1158 | |||
| 1159 | "@inquirer/type": ["@inquirer/type@3.0.10", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA=="], | ||
| 1160 | |||
| 1108 | "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.31.0", "", {}, "sha512-1yrgvXlmXH2oNj3eFTrkwacGJbmM0crwipA3ohCrjv52gBeDaD7PsTvFYinlAnqU8iPME3LGP437yk05a2oejw=="], | 1161 | "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.31.0", "", {}, "sha512-1yrgvXlmXH2oNj3eFTrkwacGJbmM0crwipA3ohCrjv52gBeDaD7PsTvFYinlAnqU8iPME3LGP437yk05a2oejw=="], |
| 1109 | 1162 | ||
| 1110 | "@jitl/quickjs-wasmfile-debug-asyncify": ["@jitl/quickjs-wasmfile-debug-asyncify@0.31.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.31.0" } }, "sha512-YkdzQdr1uaftFhgEnTRjTTZHk2SFZdpWO7XhOmRVbi6CEVsH9g5oNF8Ta1q3OuSJHRwwT8YsuR1YzEiEIJEk6w=="], | 1163 | "@jitl/quickjs-wasmfile-debug-asyncify": ["@jitl/quickjs-wasmfile-debug-asyncify@0.31.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.31.0" } }, "sha512-YkdzQdr1uaftFhgEnTRjTTZHk2SFZdpWO7XhOmRVbi6CEVsH9g5oNF8Ta1q3OuSJHRwwT8YsuR1YzEiEIJEk6w=="], |
| @@ -1147,14 +1200,28 @@ · 36 unmodified lines | |||
| 1147 | 1200 | ||
| 1148 | "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], | 1201 | "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], |
| 1149 | 1202 | ||
| 1203 | "@mswjs/interceptors": ["@mswjs/interceptors@0.41.3", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA=="], | ||
| 1204 | |||
| 1150 | "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], | 1205 | "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], |
| 1151 | 1206 | ||
| 1207 | "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], | ||
| 1208 | |||
| 1209 | "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], | ||
| 1210 | |||
| 1211 | "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], | ||
| 1212 | |||
| 1152 | "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], | 1213 | "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], |
| 1153 | 1214 | ||
| 1154 | "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], | 1215 | "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], |
| 1155 | 1216 | ||
| 1156 | "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], | 1217 | "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], |
| 1157 | 1218 | ||
| 1219 | "@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="], | ||
| 1220 | |||
| 1221 | "@open-draft/logger": ["@open-draft/logger@0.3.0", "", { "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" } }, "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ=="], | ||
| 1222 | |||
| 1223 | "@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="], | ||
| 1224 | |||
| 1158 | "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], | 1225 | "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], |
| 1159 | 1226 | ||
| 1160 | "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], | 1227 | "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.213.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw=="], |
| @@ -1311,6 +1378,40 @@ · 150 unmodified lines | |||
| 1311 | 1378 | ||
| 1312 | "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], | 1379 | "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], |
| 1313 | 1380 | ||
| 1381 | "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], | ||
| 1382 | |||
| 1383 | "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], | ||
| 1384 | |||
| 1385 | "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], | ||
| 1386 | |||
| 1387 | "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], | ||
| 1388 | |||
| 1389 | "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], | ||
| 1390 | |||
| 1391 | "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], | ||
| 1392 | |||
| 1393 | "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], | ||
| 1394 | |||
| 1395 | "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], | ||
| 1396 | |||
| 1397 | "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], | ||
| 1398 | |||
| 1399 | "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], | ||
| 1400 | |||
| 1401 | "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], | ||
| 1402 | |||
| 1403 | "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], | ||
| 1404 | |||
| 1405 | "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], | ||
| 1406 | |||
| 1407 | "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], | ||
| 1408 | |||
| 1409 | "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], | ||
| 1410 | |||
| 1411 | "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], | ||
| 1412 | |||
| 1413 | "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], | ||
| 1414 | |||
| 1314 | "@react-grab/cli": ["@react-grab/cli@0.1.26", "", { "dependencies": { "@antfu/ni": "^0.23.0", "commander": "^14.0.0", "ignore": "^7.0.5", "jsonc-parser": "^3.3.1", "ora": "^8.2.0", "picocolors": "^1.1.1", "prompts": "^2.4.2", "smol-toml": "^1.6.0" }, "bin": { "react-grab": "dist/cli.js" } }, "sha512-nNOBdrJ2K7jji6L/X9ARCpU1o/CQ33KYZUtW7vAtrfDM2hyvAIA224ps+Syl97FxhS7pO8b59Bnhc7YLG6h3nA=="], | 1415 | "@react-grab/cli": ["@react-grab/cli@0.1.26", "", { "dependencies": { "@antfu/ni": "^0.23.0", "commander": "^14.0.0", "ignore": "^7.0.5", "jsonc-parser": "^3.3.1", "ora": "^8.2.0", "picocolors": "^1.1.1", "prompts": "^2.4.2", "smol-toml": "^1.6.0" }, "bin": { "react-grab": "dist/cli.js" } }, "sha512-nNOBdrJ2K7jji6L/X9ARCpU1o/CQ33KYZUtW7vAtrfDM2hyvAIA224ps+Syl97FxhS7pO8b59Bnhc7YLG6h3nA=="], |
| 1315 | 1416 | ||
| 1316 | "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.3", "", {}, "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q=="], | 1417 | "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.3", "", {}, "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q=="], |
| @@ -1365,6 +1466,8 @@ · 48 unmodified lines | |||
| 1365 | 1466 | ||
| 1366 | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], | 1467 | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], |
| 1367 | 1468 | ||
| 1469 | "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], | ||
| 1470 | |||
| 1368 | "@shikijs/core": ["@shikijs/core@4.0.1", "", { "dependencies": { "@shikijs/primitive": "4.0.1", "@shikijs/types": "4.0.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-vWvqi9JNgz1dRL9Nvog5wtx7RuNkf7MEPl2mU/cyUUxJeH1CAr3t+81h8zO8zs7DK6cKLMoU9TvukWIDjP4Lzg=="], | 1471 | "@shikijs/core": ["@shikijs/core@4.0.1", "", { "dependencies": { "@shikijs/primitive": "4.0.1", "@shikijs/types": "4.0.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-vWvqi9JNgz1dRL9Nvog5wtx7RuNkf7MEPl2mU/cyUUxJeH1CAr3t+81h8zO8zs7DK6cKLMoU9TvukWIDjP4Lzg=="], |
| 1369 | 1472 | ||
| 1370 | "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.1", "", { "dependencies": { "@shikijs/types": "4.0.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-DJK9NiwtGYqMuKCRO4Ip0FKNDQpmaiS+K5bFjJ7DWFn4zHueDWgaUG8kAofkrnXF6zPPYYQY7J5FYVW9MbZyBg=="], | 1473 | "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.1", "", { "dependencies": { "@shikijs/types": "4.0.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-DJK9NiwtGYqMuKCRO4Ip0FKNDQpmaiS+K5bFjJ7DWFn4zHueDWgaUG8kAofkrnXF6zPPYYQY7J5FYVW9MbZyBg=="], |
| @@ -1381,6 +1484,8 @@ · 10 unmodified lines | |||
| 1381 | 1484 | ||
| 1382 | "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], | 1485 | "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], |
| 1383 | 1486 | ||
| 1487 | "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], | ||
| 1488 | |||
| 1384 | "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], | 1489 | "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], |
| 1385 | 1490 | ||
| 1386 | "@tailwindcss/node": ["@tailwindcss/node@4.2.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.31.1", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.1" } }, "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg=="], | 1491 | "@tailwindcss/node": ["@tailwindcss/node@4.2.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.31.1", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.1" } }, "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg=="], |
| @@ -1423,6 +1528,8 @@ · 36 unmodified lines | |||
| 1423 | 1528 | ||
| 1424 | "@tanstack/store": ["@tanstack/store@0.9.2", "", {}, "sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA=="], | 1529 | "@tanstack/store": ["@tanstack/store@0.9.2", "", {}, "sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA=="], |
| 1425 | 1530 | ||
| 1531 | "@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="], | ||
| 1532 | |||
| 1426 | "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], | 1533 | "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], |
| 1427 | 1534 | ||
| 1428 | "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], | 1535 | "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], |
| @@ -1459,10 +1566,14 @@ · 30 unmodified lines | |||
| 1459 | 1566 | ||
| 1460 | "@types/react-reconciler": ["@types/react-reconciler@0.28.9", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg=="], | 1567 | "@types/react-reconciler": ["@types/react-reconciler@0.28.9", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg=="], |
| 1461 | 1568 | ||
| 1569 | "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="], | ||
| 1570 | |||
| 1462 | "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], | 1571 | "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], |
| 1463 | 1572 | ||
| 1464 | "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], | 1573 | "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], |
| 1465 | 1574 | ||
| 1575 | "@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="], | ||
| 1576 | |||
| 1466 | "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], | 1577 | "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], |
| 1467 | 1578 | ||
| 1468 | "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], | 1579 | "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], |
| @@ -1501,10 +1612,14 @@ · 32 unmodified lines | |||
| 1501 | 1612 | ||
| 1502 | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], | 1613 | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], |
| 1503 | 1614 | ||
| 1615 | "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], | ||
| 1616 | |||
| 1504 | "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], | 1617 | "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], |
| 1505 | 1618 | ||
| 1506 | "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], | 1619 | "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], |
| 1507 | 1620 | ||
| 1621 | "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], | ||
| 1622 | |||
| 1508 | "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], | 1623 | "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], |
| 1509 | 1624 | ||
| 1510 | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], | 1625 | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], |
| @@ -1525,6 +1640,8 @@ · 14 unmodified lines | |||
| 1525 | 1640 | ||
| 1526 | "bun-types": ["bun-types@1.3.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg=="], | 1641 | "bun-types": ["bun-types@1.3.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg=="], |
| 1527 | 1642 | ||
| 1643 | "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], | ||
| 1644 | |||
| 1528 | "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], | 1645 | "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], |
| 1529 | 1646 | ||
| 1530 | "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], | 1647 | "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], |
| @@ -1533,6 +1650,8 @@ · 2 unmodified lines | |||
| 1533 | 1650 | ||
| 1534 | "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], | 1651 | "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], |
| 1535 | 1652 | ||
| 1653 | "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], | ||
| 1654 | |||
| 1536 | "caniuse-lite": ["caniuse-lite@1.0.30001777", "", {}, "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ=="], | 1655 | "caniuse-lite": ["caniuse-lite@1.0.30001777", "", {}, "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ=="], |
| 1537 | 1656 | ||
| 1538 | "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], | 1657 | "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], |
| @@ -1559,10 +1678,16 @@ · 20 unmodified lines | |||
| 1559 | 1678 | ||
| 1560 | "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], | 1679 | "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], |
| 1561 | 1680 | ||
| 1681 | "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], | ||
| 1682 | |||
| 1562 | "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], | 1683 | "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], |
| 1563 | 1684 | ||
| 1564 | "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], | 1685 | "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], |
| 1565 | 1686 | ||
| 1687 | "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], | ||
| 1688 | |||
| 1689 | "code-block-writer": ["code-block-writer@13.0.3", "", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="], | ||
| 1690 | |||
| 1566 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], | 1691 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], |
| 1567 | 1692 | ||
| 1568 | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], | 1693 | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], |
| @@ -1585,12 +1710,18 @@ · 16 unmodified lines | |||
| 1585 | 1710 | ||
| 1586 | "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], | 1711 | "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], |
| 1587 | 1712 | ||
| 1713 | "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], | ||
| 1714 | |||
| 1588 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], | 1715 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], |
| 1589 | 1716 | ||
| 1717 | "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], | ||
| 1718 | |||
| 1590 | "cssstyle": ["cssstyle@4.6.0", "", { "dependencies": { "@asamuzakjp/css-color": "^3.2.0", "rrweb-cssom": "^0.8.0" } }, "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg=="], | 1719 | "cssstyle": ["cssstyle@4.6.0", "", { "dependencies": { "@asamuzakjp/css-color": "^3.2.0", "rrweb-cssom": "^0.8.0" } }, "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg=="], |
| 1591 | 1720 | ||
| 1592 | "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], | 1721 | "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], |
| 1593 | 1722 | ||
| 1723 | "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], | ||
| 1724 | |||
| 1594 | "data-urls": ["data-urls@5.0.0", "", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], | 1725 | "data-urls": ["data-urls@5.0.0", "", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], |
| 1595 | 1726 | ||
| 1596 | "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], | 1727 | "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], |
| @@ -1599,8 +1730,18 @@ · 2 unmodified lines | |||
| 1599 | 1730 | ||
| 1600 | "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], | 1731 | "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], |
| 1601 | 1732 | ||
| 1733 | "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], | ||
| 1734 | |||
| 1602 | "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], | 1735 | "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], |
| 1603 | 1736 | ||
| 1737 | "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], | ||
| 1738 | |||
| 1739 | "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], | ||
| 1740 | |||
| 1741 | "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], | ||
| 1742 | |||
| 1743 | "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], | ||
| 1744 | |||
| 1604 | "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], | 1745 | "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], |
| 1605 | 1746 | ||
| 1606 | "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], | 1747 | "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], |
| @@ -1609,14 +1750,22 @@ · 2 unmodified lines | |||
| 1609 | 1750 | ||
| 1610 | "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], | 1751 | "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], |
| 1611 | 1752 | ||
| 1753 | "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], | ||
| 1754 | |||
| 1612 | "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], | 1755 | "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], |
| 1613 | 1756 | ||
| 1757 | "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], | ||
| 1758 | |||
| 1614 | "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], | 1759 | "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], |
| 1615 | 1760 | ||
| 1761 | "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], | ||
| 1762 | |||
| 1616 | "drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], | 1763 | "drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], |
| 1617 | 1764 | ||
| 1618 | "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], | 1765 | "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], |
| 1619 | 1766 | ||
| 1767 | "eciesjs": ["eciesjs@0.4.18", "", { "dependencies": { "@ecies/ciphers": "^0.2.5", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.7", "@noble/hashes": "^1.8.0" } }, "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ=="], | ||
| 1768 | |||
| 1620 | "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], | 1769 | "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], |
| 1621 | 1770 | ||
| 1622 | "effect": ["effect@3.19.19", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-Yc8U/SVXo2dHnaP7zNBlAo83h/nzSJpi7vph6Hzyl4ulgMBIgPmz3UzOjb9sBgpFE00gC0iETR244sfXDNLHRg=="], | 1771 | "effect": ["effect@3.19.19", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-Yc8U/SVXo2dHnaP7zNBlAo83h/nzSJpi7vph6Hzyl4ulgMBIgPmz3UzOjb9sBgpFE00gC0iETR244sfXDNLHRg=="], |
| @@ -1633,6 +1782,10 @@ · 10 unmodified lines | |||
| 1633 | 1782 | ||
| 1634 | "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], | 1783 | "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], |
| 1635 | 1784 | ||
| 1785 | "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], | ||
| 1786 | |||
| 1787 | "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], | ||
| 1788 | |||
| 1636 | "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], | 1789 | "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], |
| 1637 | 1790 | ||
| 1638 | "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], | 1791 | "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], |
| @@ -1661,6 +1814,8 @@ · 22 unmodified lines | |||
| 1661 | 1814 | ||
| 1662 | "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], | 1815 | "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], |
| 1663 | 1816 | ||
| 1817 | "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], | ||
| 1818 | |||
| 1664 | "executor": ["executor@workspace:apps/executor"], | 1819 | "executor": ["executor@workspace:apps/executor"], |
| 1665 | 1820 | ||
| 1666 | "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], | 1821 | "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], |
| @@ -1687,6 +1842,10 @@ · 20 unmodified lines | |||
| 1687 | 1842 | ||
| 1688 | "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], | 1843 | "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], |
| 1689 | 1844 | ||
| 1845 | "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], | ||
| 1846 | |||
| 1847 | "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], | ||
| 1848 | |||
| 1690 | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], | 1849 | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], |
| 1691 | 1850 | ||
| 1692 | "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], | 1851 | "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], |
| @@ -1697,6 +1856,8 @@ · 4 unmodified lines | |||
| 1697 | 1856 | ||
| 1698 | "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="], | 1857 | "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="], |
| 1699 | 1858 | ||
| 1859 | "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], | ||
| 1860 | |||
| 1700 | "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], | 1861 | "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], |
| 1701 | 1862 | ||
| 1702 | "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], | 1863 | "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], |
| @@ -1707,6 +1868,8 @@ · 4 unmodified lines | |||
| 1707 | 1868 | ||
| 1708 | "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], | 1869 | "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], |
| 1709 | 1870 | ||
| 1871 | "fuzzysort": ["fuzzysort@3.1.0", "", {}, "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ=="], | ||
| 1872 | |||
| 1710 | "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], | 1873 | "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], |
| 1711 | 1874 | ||
| 1712 | "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], | 1875 | "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], |
| @@ -1715,8 +1878,14 @@ · 2 unmodified lines | |||
| 1715 | 1878 | ||
| 1716 | "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], | 1879 | "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], |
| 1717 | 1880 | ||
| 1881 | "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], | ||
| 1882 | |||
| 1883 | "get-own-enumerable-keys": ["get-own-enumerable-keys@1.0.0", "", {}, "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA=="], | ||
| 1884 | |||
| 1718 | "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], | 1885 | "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], |
| 1719 | 1886 | ||
| 1887 | "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], | ||
| 1888 | |||
| 1720 | "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], | 1889 | "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], |
| 1721 | 1890 | ||
| 1722 | "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], | 1891 | "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], |
| @@ -1749,6 +1918,8 @@ · 26 unmodified lines | |||
| 1749 | 1918 | ||
| 1750 | "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], | 1919 | "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], |
| 1751 | 1920 | ||
| 1921 | "headers-polyfill": ["headers-polyfill@4.0.3", "", {}, "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ=="], | ||
| 1922 | |||
| 1752 | "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], | 1923 | "hono": ["hono@4.12.5", "", {}, "sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg=="], |
| 1753 | 1924 | ||
| 1754 | "html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], | 1925 | "html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], |
| @@ -1765,10 +1936,14 @@ · 10 unmodified lines | |||
| 1765 | 1936 | ||
| 1766 | "human-id": ["human-id@4.1.3", "", { "bin": { "human-id": "dist/cli.js" } }, "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q=="], | 1937 | "human-id": ["human-id@4.1.3", "", { "bin": { "human-id": "dist/cli.js" } }, "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q=="], |
| 1767 | 1938 | ||
| 1939 | "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], | ||
| 1940 | |||
| 1768 | "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], | 1941 | "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], |
| 1769 | 1942 | ||
| 1770 | "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], | 1943 | "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], |
| 1771 | 1944 | ||
| 1945 | "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], | ||
| 1946 | |||
| 1772 | "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], | 1947 | "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], |
| 1773 | 1948 | ||
| 1774 | "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], | 1949 | "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], |
| @@ -1783,8 +1958,12 @@ · 8 unmodified lines | |||
| 1783 | 1958 | ||
| 1784 | "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], | 1959 | "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], |
| 1785 | 1960 | ||
| 1961 | "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], | ||
| 1962 | |||
| 1786 | "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], | 1963 | "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], |
| 1787 | 1964 | ||
| 1965 | "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], | ||
| 1966 | |||
| 1788 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], | 1967 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], |
| 1789 | 1968 | ||
| 1790 | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], | 1969 | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], |
| @@ -1793,22 +1972,36 @@ · 2 unmodified lines | |||
| 1793 | 1972 | ||
| 1794 | "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], | 1973 | "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], |
| 1795 | 1974 | ||
| 1975 | "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], | ||
| 1976 | |||
| 1977 | "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], | ||
| 1978 | |||
| 1796 | "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], | 1979 | "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], |
| 1797 | 1980 | ||
| 1981 | "is-node-process": ["is-node-process@1.2.0", "", {}, "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw=="], | ||
| 1982 | |||
| 1798 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], | 1983 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], |
| 1799 | 1984 | ||
| 1985 | "is-obj": ["is-obj@3.0.0", "", {}, "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ=="], | ||
| 1986 | |||
| 1800 | "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], | 1987 | "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], |
| 1801 | 1988 | ||
| 1802 | "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], | 1989 | "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], |
| 1803 | 1990 | ||
| 1804 | "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], | 1991 | "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], |
| 1805 | 1992 | ||
| 1993 | "is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="], | ||
| 1994 | |||
| 1995 | "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], | ||
| 1996 | |||
| 1806 | "is-subdir": ["is-subdir@1.2.0", "", { "dependencies": { "better-path-resolve": "1.0.0" } }, "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw=="], | 1997 | "is-subdir": ["is-subdir@1.2.0", "", { "dependencies": { "better-path-resolve": "1.0.0" } }, "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw=="], |
| 1807 | 1998 | ||
| 1808 | "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], | 1999 | "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], |
| 1809 | 2000 | ||
| 1810 | "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], | 2001 | "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], |
| 1811 | 2002 | ||
| 2003 | "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], | ||
| 2004 | |||
| 1812 | "isbot": ["isbot@5.1.35", "", {}, "sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg=="], | 2005 | "isbot": ["isbot@5.1.35", "", {}, "sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg=="], |
| 1813 | 2006 | ||
| 1814 | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], | 2007 | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], |
| @@ -1825,6 +2018,8 @@ · 10 unmodified lines | |||
| 1825 | 2018 | ||
| 1826 | "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], | 2019 | "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], |
| 1827 | 2020 | ||
| 2021 | "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], | ||
| 2022 | |||
| 1828 | "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], | 2023 | "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], |
| 1829 | 2024 | ||
| 1830 | "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], | 2025 | "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], |
| @@ -1837,7 +2032,7 @@ · 6 unmodified lines | |||
| 1837 | 2032 | ||
| 1838 | "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], | 2033 | "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], |
| 1839 | 2034 | ||
| 1840 | "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], | 2035 | "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], |
| 1841 | 2036 | ||
| 1842 | "knip": ["knip@5.85.0", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "jiti": "^2.6.0", "js-yaml": "^4.1.1", "minimist": "^1.2.8", "oxc-resolver": "^11.15.0", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.5.2", "strip-json-comments": "5.0.3", "zod": "^4.1.11" }, "peerDependencies": { "@types/node": ">=18", "typescript": ">=5.0.4 <7" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg=="], | 2037 | "knip": ["knip@5.85.0", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "jiti": "^2.6.0", "js-yaml": "^4.1.1", "minimist": "^1.2.8", "oxc-resolver": "^11.15.0", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.5.2", "strip-json-comments": "5.0.3", "zod": "^4.1.11" }, "peerDependencies": { "@types/node": ">=18", "typescript": ">=5.0.4 <7" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg=="], |
| 1843 | 2038 | ||
| @@ -1867,6 +2062,8 @@ · 23 unmodified lines | |||
| 1867 | 2062 | ||
| 1868 | "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], | 2063 | "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], |
| 1869 | 2064 | ||
| 2065 | "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], | ||
| 2066 | |||
| 1870 | "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], | 2067 | "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], |
| 1871 | 2068 | ||
| 1872 | "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], | 2069 | "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], |
| @@ -1883,6 +2080,8 @@ · 10 unmodified lines | |||
| 1883 | 2080 | ||
| 1884 | "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], | 2081 | "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], |
| 1885 | 2082 | ||
| 2083 | "lucide-react": ["lucide-react@1.7.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg=="], | ||
| 2084 | |||
| 1886 | "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], | 2085 | "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], |
| 1887 | 2086 | ||
| 1888 | "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], | 2087 | "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], |
| @@ -1925,6 +2124,8 @@ · 36 unmodified lines | |||
| 1925 | 2124 | ||
| 1926 | "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], | 2125 | "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], |
| 1927 | 2126 | ||
| 2127 | "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], | ||
| 2128 | |||
| 1928 | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], | 2129 | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], |
| 1929 | 2130 | ||
| 1930 | "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], | 2131 | "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], |
| @@ -1991,6 +2192,8 @@ · 60 unmodified lines | |||
| 1991 | 2192 | ||
| 1992 | "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], | 2193 | "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], |
| 1993 | 2194 | ||
| 2195 | "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], | ||
| 2196 | |||
| 1994 | "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], | 2197 | "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], |
| 1995 | 2198 | ||
| 1996 | "minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], | 2199 | "minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], |
| @@ -2005,38 +2208,54 @@ · 8 unmodified lines | |||
| 2005 | 2208 | ||
| 2006 | "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], | 2209 | "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], |
| 2007 | 2210 | ||
| 2211 | "msw": ["msw@2.12.14", "", { "dependencies": { "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.41.2", "@open-draft/deferred-promise": "^2.2.0", "@types/statuses": "^2.0.6", "cookie": "^1.0.2", "graphql": "^16.12.0", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.10.1", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.0", "type-fest": "^5.2.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-4KXa4nVBIBjbDbd7vfQNuQ25eFxug0aropCQFoI0JdOBuJWamkT1yLVIWReFI8SiTRc+H1hKzaNk+cLk2N9rtQ=="], | ||
| 2212 | |||
| 2008 | "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], | 2213 | "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], |
| 2009 | 2214 | ||
| 2215 | "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], | ||
| 2216 | |||
| 2010 | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], | 2217 | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], |
| 2011 | 2218 | ||
| 2012 | "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], | 2219 | "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], |
| 2013 | 2220 | ||
| 2014 | "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], | 2221 | "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], |
| 2015 | 2222 | ||
| 2223 | "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], | ||
| 2224 | |||
| 2225 | "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], | ||
| 2226 | |||
| 2016 | "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], | 2227 | "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], |
| 2017 | 2228 | ||
| 2018 | "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], | 2229 | "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], |
| 2019 | 2230 | ||
| 2231 | "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], | ||
| 2232 | |||
| 2020 | "nwsapi": ["nwsapi@2.2.23", "", {}, "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ=="], | 2233 | "nwsapi": ["nwsapi@2.2.23", "", {}, "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ=="], |
| 2021 | 2234 | ||
| 2022 | "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], | 2235 | "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], |
| 2023 | 2236 | ||
| 2024 | "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], | 2237 | "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], |
| 2025 | 2238 | ||
| 2239 | "object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="], | ||
| 2240 | |||
| 2026 | "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], | 2241 | "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], |
| 2027 | 2242 | ||
| 2028 | "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], | 2243 | "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], |
| 2029 | 2244 | ||
| 2030 | "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], | 2245 | "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], |
| 2031 | 2246 | ||
| 2032 | "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], | 2247 | "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], |
| 2033 | 2248 | ||
| 2034 | "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], | 2249 | "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], |
| 2035 | 2250 | ||
| 2251 | "open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], | ||
| 2252 | |||
| 2036 | "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], | 2253 | "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], |
| 2037 | 2254 | ||
| 2038 | "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], | 2255 | "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], |
| 2039 | 2256 | ||
| 2257 | "outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="], | ||
| 2258 | |||
| 2040 | "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="], | 2259 | "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="], |
| 2041 | 2260 | ||
| 2042 | "oxlint": ["oxlint@1.56.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.56.0", "@oxlint/binding-android-arm64": "1.56.0", "@oxlint/binding-darwin-arm64": "1.56.0", "@oxlint/binding-darwin-x64": "1.56.0", "@oxlint/binding-freebsd-x64": "1.56.0", "@oxlint/binding-linux-arm-gnueabihf": "1.56.0", "@oxlint/binding-linux-arm-musleabihf": "1.56.0", "@oxlint/binding-linux-arm64-gnu": "1.56.0", "@oxlint/binding-linux-arm64-musl": "1.56.0", "@oxlint/binding-linux-ppc64-gnu": "1.56.0", "@oxlint/binding-linux-riscv64-gnu": "1.56.0", "@oxlint/binding-linux-riscv64-musl": "1.56.0", "@oxlint/binding-linux-s390x-gnu": "1.56.0", "@oxlint/binding-linux-x64-gnu": "1.56.0", "@oxlint/binding-linux-x64-musl": "1.56.0", "@oxlint/binding-openharmony-arm64": "1.56.0", "@oxlint/binding-win32-arm64-msvc": "1.56.0", "@oxlint/binding-win32-ia32-msvc": "1.56.0", "@oxlint/binding-win32-x64-msvc": "1.56.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.15.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-Q+5Mj5PVaH/R6/fhMMFzw4dT+KPB+kQW4kaL8FOIq7tfhlnEVp6+3lcWqFruuTNlUo9srZUW3qH7Id4pskeR6g=="], | 2261 | "oxlint": ["oxlint@1.56.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.56.0", "@oxlint/binding-android-arm64": "1.56.0", "@oxlint/binding-darwin-arm64": "1.56.0", "@oxlint/binding-darwin-x64": "1.56.0", "@oxlint/binding-freebsd-x64": "1.56.0", "@oxlint/binding-linux-arm-gnueabihf": "1.56.0", "@oxlint/binding-linux-arm-musleabihf": "1.56.0", "@oxlint/binding-linux-arm64-gnu": "1.56.0", "@oxlint/binding-linux-arm64-musl": "1.56.0", "@oxlint/binding-linux-ppc64-gnu": "1.56.0", "@oxlint/binding-linux-riscv64-gnu": "1.56.0", "@oxlint/binding-linux-riscv64-musl": "1.56.0", "@oxlint/binding-linux-s390x-gnu": "1.56.0", "@oxlint/binding-linux-x64-gnu": "1.56.0", "@oxlint/binding-linux-x64-musl": "1.56.0", "@oxlint/binding-openharmony-arm64": "1.56.0", "@oxlint/binding-win32-arm64-msvc": "1.56.0", "@oxlint/binding-win32-ia32-msvc": "1.56.0", "@oxlint/binding-win32-x64-msvc": "1.56.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.15.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-Q+5Mj5PVaH/R6/fhMMFzw4dT+KPB+kQW4kaL8FOIq7tfhlnEVp6+3lcWqFruuTNlUo9srZUW3qH7Id4pskeR6g=="], |
| @@ -2053,17 +2272,25 @@ · 10 unmodified lines | |||
| 2053 | 2272 | ||
| 2054 | "package-manager-detector": ["package-manager-detector@0.2.11", "", { "dependencies": { "quansync": "^0.2.7" } }, "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ=="], | 2273 | "package-manager-detector": ["package-manager-detector@0.2.11", "", { "dependencies": { "quansync": "^0.2.7" } }, "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ=="], |
| 2055 | 2274 | ||
| 2275 | "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], | ||
| 2276 | |||
| 2056 | "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], | 2277 | "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], |
| 2057 | 2278 | ||
| 2279 | "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], | ||
| 2280 | |||
| 2281 | "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], | ||
| 2282 | |||
| 2058 | "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], | 2283 | "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], |
| 2059 | 2284 | ||
| 2060 | "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], | 2285 | "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], |
| 2061 | 2286 | ||
| 2287 | "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], | ||
| 2288 | |||
| 2062 | "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], | 2289 | "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], |
| 2063 | 2290 | ||
| 2064 | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], | 2291 | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], |
| 2065 | 2292 | ||
| 2066 | "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], | 2293 | "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], |
| 2067 | 2294 | ||
| 2068 | "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], | 2295 | "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], |
| 2069 | 2296 | ||
| @@ -2081,8 +2308,14 @@ · 11 unmodified lines | |||
| 2081 | 2308 | ||
| 2082 | "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], | 2309 | "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], |
| 2083 | 2310 | ||
| 2311 | "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], | ||
| 2312 | |||
| 2313 | "powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="], | ||
| 2314 | |||
| 2084 | "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], | 2315 | "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], |
| 2085 | 2316 | ||
| 2317 | "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], | ||
| 2318 | |||
| 2086 | "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], | 2319 | "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], |
| 2087 | 2320 | ||
| 2088 | "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], | 2321 | "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], |
| @@ -2117,8 +2350,16 @@ · 28 unmodified lines | |||
| 2117 | 2350 | ||
| 2118 | "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], | 2351 | "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], |
| 2119 | 2352 | ||
| 2353 | "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], | ||
| 2354 | |||
| 2355 | "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], | ||
| 2356 | |||
| 2357 | "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], | ||
| 2358 | |||
| 2120 | "read-yaml-file": ["read-yaml-file@1.1.0", "", { "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", "pify": "^4.0.1", "strip-bom": "^3.0.0" } }, "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA=="], | 2359 | "read-yaml-file": ["read-yaml-file@1.1.0", "", { "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", "pify": "^4.0.1", "strip-bom": "^3.0.0" } }, "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA=="], |
| 2121 | 2360 | ||
| 2361 | "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], | ||
| 2362 | |||
| 2122 | "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], | 2363 | "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], |
| 2123 | 2364 | ||
| 2124 | "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], | 2365 | "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], |
| @@ -2145,10 +2386,14 @@ · 20 unmodified lines | |||
| 2145 | 2386 | ||
| 2146 | "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], | 2387 | "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], |
| 2147 | 2388 | ||
| 2389 | "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], | ||
| 2390 | |||
| 2148 | "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], | 2391 | "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], |
| 2149 | 2392 | ||
| 2150 | "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], | 2393 | "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], |
| 2151 | 2394 | ||
| 2395 | "rettime": ["rettime@0.10.1", "", {}, "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw=="], | ||
| 2396 | |||
| 2152 | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], | 2397 | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], |
| 2153 | 2398 | ||
| 2154 | "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], | 2399 | "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], |
| @@ -2157,6 +2402,8 @@ · 2 unmodified lines | |||
| 2157 | 2402 | ||
| 2158 | "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], | 2403 | "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], |
| 2159 | 2404 | ||
| 2405 | "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], | ||
| 2406 | |||
| 2160 | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], | 2407 | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], |
| 2161 | 2408 | ||
| 2162 | "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], | 2409 | "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], |
| @@ -2179,6 +2426,8 @@ · 16 unmodified lines | |||
| 2179 | 2426 | ||
| 2180 | "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], | 2427 | "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], |
| 2181 | 2428 | ||
| 2429 | "shadcn": ["shadcn@4.1.1", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-nBj+7LYC9kzV9v9QmRPpoOhfW4KctJVQejywdAt/K+K+z4RYlJOcO2a4AaF7elrRWkfCbgXeGK02liV0KB9HvQ=="], | ||
| 2430 | |||
| 2182 | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], | 2431 | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], |
| 2183 | 2432 | ||
| 2184 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], | 2433 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], |
| @@ -2205,6 +2454,8 @@ · 20 unmodified lines | |||
| 2205 | 2454 | ||
| 2206 | "solid-js": ["solid-js@1.9.11", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.0", "seroval-plugins": "~1.5.0" } }, "sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q=="], | 2455 | "solid-js": ["solid-js@1.9.11", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.0", "seroval-plugins": "~1.5.0" } }, "sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q=="], |
| 2207 | 2456 | ||
| 2457 | "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], | ||
| 2458 | |||
| 2208 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], | 2459 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], |
| 2209 | 2460 | ||
| 2210 | "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], | 2461 | "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], |
| @@ -2223,14 +2474,20 @@ · 12 unmodified lines | |||
| 2223 | 2474 | ||
| 2224 | "streamdown": ["streamdown@2.4.0", "", { "dependencies": { "clsx": "^2.1.1", "hast-util-to-jsx-runtime": "^2.3.6", "html-url-attributes": "^3.0.1", "marked": "^17.0.1", "rehype-harden": "^1.1.8", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remend": "1.2.2", "tailwind-merge": "^3.4.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-fRk4HEYNznRLmxoVeT8wsGBwHF6/Yrdey6k+ZrE1Qtp4NyKwm7G/6e2Iw8penY4yLx31TlAHWT5Bsg1weZ9FZg=="], | 2475 | "streamdown": ["streamdown@2.4.0", "", { "dependencies": { "clsx": "^2.1.1", "hast-util-to-jsx-runtime": "^2.3.6", "html-url-attributes": "^3.0.1", "marked": "^17.0.1", "rehype-harden": "^1.1.8", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remend": "1.2.2", "tailwind-merge": "^3.4.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-fRk4HEYNznRLmxoVeT8wsGBwHF6/Yrdey6k+ZrE1Qtp4NyKwm7G/6e2Iw8penY4yLx31TlAHWT5Bsg1weZ9FZg=="], |
| 2225 | 2476 | ||
| 2477 | "strict-event-emitter": ["strict-event-emitter@0.5.1", "", {}, "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ=="], | ||
| 2478 | |||
| 2226 | "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], | 2479 | "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], |
| 2227 | 2480 | ||
| 2228 | "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], | 2481 | "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], |
| 2229 | 2482 | ||
| 2483 | "stringify-object": ["stringify-object@5.0.0", "", { "dependencies": { "get-own-enumerable-keys": "^1.0.0", "is-obj": "^3.0.0", "is-regexp": "^3.1.0" } }, "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg=="], | ||
| 2484 | |||
| 2230 | "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], | 2485 | "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], |
| 2231 | 2486 | ||
| 2232 | "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], | 2487 | "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], |
| 2233 | 2488 | ||
| 2489 | "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], | ||
| 2490 | |||
| 2234 | "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], | 2491 | "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], |
| 2235 | 2492 | ||
| 2236 | "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], | 2493 | "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], |
| @@ -2241,6 +2498,10 @@ · 4 unmodified lines | |||
| 2241 | 2498 | ||
| 2242 | "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], | 2499 | "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], |
| 2243 | 2500 | ||
| 2501 | "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], | ||
| 2502 | |||
| 2503 | "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], | ||
| 2504 | |||
| 2244 | "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], | 2505 | "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], |
| 2245 | 2506 | ||
| 2246 | "tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], | 2507 | "tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], |
| @@ -2283,6 +2544,10 @@ · 36 unmodified lines | |||
| 2283 | 2544 | ||
| 2284 | "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], | 2545 | "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], |
| 2285 | 2546 | ||
| 2547 | "ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="], | ||
| 2548 | |||
| 2549 | "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], | ||
| 2550 | |||
| 2286 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], | 2551 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |
| 2287 | 2552 | ||
| 2288 | "turbo": ["turbo@2.8.14", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.14", "turbo-darwin-arm64": "2.8.14", "turbo-linux-64": "2.8.14", "turbo-linux-arm64": "2.8.14", "turbo-windows-64": "2.8.14", "turbo-windows-arm64": "2.8.14" }, "bin": { "turbo": "bin/turbo" } }, "sha512-UCTxeMNYT1cKaHiIFdLCQ7ulI+jw5i5uOnJOrRXsgUD7G3+OjlUjwVd7JfeVt2McWSVGjYA3EVW/v1FSsJ5DtA=="], | 2553 | "turbo": ["turbo@2.8.14", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.14", "turbo-darwin-arm64": "2.8.14", "turbo-linux-64": "2.8.14", "turbo-linux-arm64": "2.8.14", "turbo-windows-64": "2.8.14", "turbo-windows-arm64": "2.8.14" }, "bin": { "turbo": "bin/turbo" } }, "sha512-UCTxeMNYT1cKaHiIFdLCQ7ulI+jw5i5uOnJOrRXsgUD7G3+OjlUjwVd7JfeVt2McWSVGjYA3EVW/v1FSsJ5DtA=="], |
| @@ -2301,6 +2566,8 @@ · 12 unmodified lines | |||
| 2301 | 2566 | ||
| 2302 | "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], | 2567 | "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], |
| 2303 | 2568 | ||
| 2569 | "type-fest": ["type-fest@5.5.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g=="], | ||
| 2570 | |||
| 2304 | "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], | 2571 | "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], |
| 2305 | 2572 | ||
| 2306 | "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], | 2573 | "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], |
| @@ -2309,6 +2576,8 @@ · 2 unmodified lines | |||
| 2309 | 2576 | ||
| 2310 | "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], | 2577 | "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], |
| 2311 | 2578 | ||
| 2579 | "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], | ||
| 2580 | |||
| 2312 | "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], | 2581 | "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], |
| 2313 | 2582 | ||
| 2314 | "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], | 2583 | "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], |
| @@ -2325,12 +2594,22 @@ · 10 unmodified lines | |||
| 2325 | 2594 | ||
| 2326 | "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], | 2595 | "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], |
| 2327 | 2596 | ||
| 2597 | "until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="], | ||
| 2598 | |||
| 2328 | "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], | 2599 | "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], |
| 2329 | 2600 | ||
| 2601 | "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], | ||
| 2602 | |||
| 2603 | "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], | ||
| 2604 | |||
| 2330 | "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], | 2605 | "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], |
| 2331 | 2606 | ||
| 2607 | "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], | ||
| 2608 | |||
| 2332 | "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], | 2609 | "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], |
| 2333 | 2610 | ||
| 2611 | "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], | ||
| 2612 | |||
| 2334 | "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], | 2613 | "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], |
| 2335 | 2614 | ||
| 2336 | "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], | 2615 | "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], |
| @@ -2351,6 +2630,8 @@ · 14 unmodified lines | |||
| 2351 | 2630 | ||
| 2352 | "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], | 2631 | "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], |
| 2353 | 2632 | ||
| 2633 | "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], | ||
| 2634 | |||
| 2354 | "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], | 2635 | "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], |
| 2355 | 2636 | ||
| 2356 | "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], | 2637 | "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], |
| @@ -2363,12 +2644,14 @@ · 6 unmodified lines | |||
| 2363 | 2644 | ||
| 2364 | "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], | 2645 | "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], |
| 2365 | 2646 | ||
| 2366 | "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], | 2647 | "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], |
| 2367 | 2648 | ||
| 2368 | "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], | 2649 | "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], |
| 2369 | 2650 | ||
| 2370 | "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], | 2651 | "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], |
| 2371 | 2652 | ||
| 2653 | "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], | ||
| 2654 | |||
| 2372 | "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], | 2655 | "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], |
| 2373 | 2656 | ||
| 2374 | "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], | 2657 | "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], |
| @@ -2383,6 +2666,10 @@ · 8 unmodified lines | |||
| 2383 | 2666 | ||
| 2384 | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], | 2667 | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], |
| 2385 | 2668 | ||
| 2669 | "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], | ||
| 2670 | |||
| 2671 | "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], | ||
| 2672 | |||
| 2386 | "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], | 2673 | "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], |
| 2387 | 2674 | ||
| 2388 | "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], | 2675 | "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], |
| @@ -2397,10 +2684,20 @@ · 8 unmodified lines | |||
| 2397 | 2684 | ||
| 2398 | "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], | 2685 | "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], |
| 2399 | 2686 | ||
| 2687 | "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], | ||
| 2688 | |||
| 2400 | "@changesets/apply-release-plan/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], | 2689 | "@changesets/apply-release-plan/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], |
| 2401 | 2690 | ||
| 2402 | "@changesets/write/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], | 2691 | "@changesets/write/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], |
| 2403 | 2692 | ||
| 2693 | "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], | ||
| 2694 | |||
| 2695 | "@dotenvx/dotenvx/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], | ||
| 2696 | |||
| 2697 | "@dotenvx/dotenvx/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], | ||
| 2698 | |||
| 2699 | "@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], | ||
| 2700 | |||
| 2404 | "@manypkg/find-root/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], | 2701 | "@manypkg/find-root/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], |
| 2405 | 2702 | ||
| 2406 | "@manypkg/find-root/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], | 2703 | "@manypkg/find-root/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], |
| @@ -2409,6 +2706,16 @@ · 2 unmodified lines | |||
| 2409 | 2706 | ||
| 2410 | "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], | 2707 | "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], |
| 2411 | 2708 | ||
| 2709 | "@radix-ui/react-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], | ||
| 2710 | |||
| 2711 | "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], | ||
| 2712 | |||
| 2713 | "@radix-ui/react-focus-scope/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], | ||
| 2714 | |||
| 2715 | "@radix-ui/react-portal/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], | ||
| 2716 | |||
| 2717 | "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], | ||
| 2718 | |||
| 2412 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], | 2719 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], |
| 2413 | 2720 | ||
| 2414 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], | 2721 | "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], |
| @@ -2421,20 +2728,42 @@ · 6 unmodified lines | |||
| 2421 | 2728 | ||
| 2422 | "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], | 2729 | "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |
| 2423 | 2730 | ||
| 2731 | "@ts-morph/common/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], | ||
| 2732 | |||
| 2424 | "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], | 2733 | "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], |
| 2425 | 2734 | ||
| 2735 | "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], | ||
| 2736 | |||
| 2426 | "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], | 2737 | "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], |
| 2427 | 2738 | ||
| 2739 | "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], | ||
| 2740 | |||
| 2428 | "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], | 2741 | "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], |
| 2429 | 2742 | ||
| 2430 | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], | 2743 | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
| 2431 | 2744 | ||
| 2745 | "msw/cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], | ||
| 2746 | |||
| 2747 | "msw/tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], | ||
| 2748 | |||
| 2749 | "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], | ||
| 2750 | |||
| 2432 | "ora/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], | 2751 | "ora/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], |
| 2433 | 2752 | ||
| 2434 | "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], | 2753 | "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], |
| 2435 | 2754 | ||
| 2755 | "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], | ||
| 2756 | |||
| 2436 | "read-yaml-file/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], | 2757 | "read-yaml-file/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], |
| 2437 | 2758 | ||
| 2759 | "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], | ||
| 2760 | |||
| 2761 | "router/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], | ||
| 2762 | |||
| 2763 | "shadcn/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], | ||
| 2764 | |||
| 2765 | "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], | ||
| 2766 | |||
| 2438 | "string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], | 2767 | "string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], |
| 2439 | 2768 | ||
| 2440 | "tough-cookie/tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], | 2769 | "tough-cookie/tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], |
| @@ -2445,12 +2774,32 @@ · 4 unmodified lines | |||
| 2445 | 2774 | ||
| 2446 | "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], | 2775 | "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], |
| 2447 | 2776 | ||
| 2777 | "@dotenvx/dotenvx/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], | ||
| 2778 | |||
| 2779 | "@dotenvx/dotenvx/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], | ||
| 2780 | |||
| 2781 | "@dotenvx/dotenvx/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], | ||
| 2782 | |||
| 2783 | "@dotenvx/dotenvx/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], | ||
| 2784 | |||
| 2785 | "@dotenvx/dotenvx/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], | ||
| 2786 | |||
| 2787 | "@dotenvx/dotenvx/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], | ||
| 2788 | |||
| 2789 | "@dotenvx/dotenvx/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], | ||
| 2790 | |||
| 2791 | "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], | ||
| 2792 | |||
| 2448 | "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], | 2793 | "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], |
| 2449 | 2794 | ||
| 2450 | "ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], | 2795 | "ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], |
| 2451 | 2796 | ||
| 2452 | "read-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], | 2797 | "read-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], |
| 2453 | 2798 | ||
| 2799 | "shadcn/fs-extra/jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], | ||
| 2800 | |||
| 2801 | "shadcn/fs-extra/universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], | ||
| 2802 | |||
| 2454 | "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], | 2803 | "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], |
| 2455 | 2804 | ||
| 2456 | "tough-cookie/tldts/tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], | 2805 | "tough-cookie/tldts/tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], |
| @@ -2458,5 +2807,7 @@ · 1 unmodified line | |||
| 2458 | "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], | 2807 | "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], |
| 2459 | 2808 | ||
| 2460 | "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], | 2809 | "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], |
| 2810 | |||
| 2811 | "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], | ||
| 2461 | } | 2812 | } |
| 2462 | } | 2813 | } |
| @@ -0,0 +1,21 @@ | |||
| 1 | { | ||
| 2 | "$schema": "https://ui.shadcn.com/schema.json", | ||
| 3 | "style": "base-nova", | ||
| 4 | "rsc": false, | ||
| 5 | "tsx": true, | ||
| 6 | "tailwind": { | ||
| 7 | "config": "", | ||
| 8 | "css": "../../apps/web/src/globals.css", | ||
| 9 | "baseColor": "neutral", | ||
| 10 | "cssVariables": true, | ||
| 11 | "prefix": "" | ||
| 12 | }, | ||
| 13 | "iconLibrary": "lucide", | ||
| 14 | "aliases": { | ||
| 15 | "components": "@/components/ui", | ||
| 16 | "utils": "@/lib/utils", | ||
| 17 | "hooks": "@/hooks", | ||
| 18 | "lib": "@/lib", | ||
| 19 | "ui": "@/components/ui" | ||
| 20 | } | ||
| 21 | } | ||
| @@ -5,7 +5,10 @@ · 4 unmodified lines | |||
| 5 | "exports": { | 5 | "exports": { |
| 6 | ".": "./src/index.ts", | 6 | ".": "./src/index.ts", |
| 7 | "./plugins": "./src/plugins/index.ts", | 7 | "./plugins": "./src/plugins/index.ts", |
| 8 | "./source-plugins": "./src/source-plugins/index.ts" | 8 | "./source-plugins": "./src/source-plugins/index.ts", |
| 9 | "./components/*": "./src/plugins/components/ui/*.tsx", | ||
| 10 | "./lib/*": "./src/plugins/lib/*.ts", | ||
| 11 | "./hooks/*": "./src/hooks/*.ts" | ||
| 9 | }, | 12 | }, |
| 10 | "scripts": { | 13 | "scripts": { |
| 11 | "typecheck": "bunx tsc --noEmit -p tsconfig.json", | 14 | "typecheck": "bunx tsc --noEmit -p tsconfig.json", |
| @@ -13,15 +16,17 @@ · 1 unmodified line | |||
| 13 | "test:watch": "bunx vitest" | 16 | "test:watch": "bunx vitest" |
| 14 | }, | 17 | }, |
| 15 | "dependencies": { | 18 | "dependencies": { |
| 16 | "@shikijs/langs": "^4.0.1", | 19 | "@base-ui/react": "^1.3.0", |
| 17 | "@shikijs/themes": "^4.0.1", | ||
| 18 | "@effect-atom/atom": "0.5.3", | 20 | "@effect-atom/atom": "0.5.3", |
| 19 | "@effect-atom/atom-react": "0.5.0", | 21 | "@effect-atom/atom-react": "0.5.0", |
| 20 | "@effect/platform": "catalog:", | 22 | "@effect/platform": "catalog:", |
| 21 | "@executor/platform-api": "workspace:*", | 23 | "@executor/platform-api": "workspace:*", |
| 22 | "@executor/platform-sdk": "workspace:*", | 24 | "@executor/platform-sdk": "workspace:*", |
| 25 | "@shikijs/langs": "^4.0.1", | ||
| 26 | "@shikijs/themes": "^4.0.1", | ||
| 23 | "class-variance-authority": "^0.7.1", | 27 | "class-variance-authority": "^0.7.1", |
| 24 | "clsx": "^2.1.1", | 28 | "clsx": "^2.1.1", |
| 29 | "cmdk": "^1.1.1", | ||
| 25 | "effect": "catalog:", | 30 | "effect": "catalog:", |
| 26 | "shiki": "^4.0.1", | 31 | "shiki": "^4.0.1", |
| 27 | "streamdown": "^2.3.0", | 32 | "streamdown": "^2.3.0", |
| @@ -290,53 +290,33 @@ export function SecretReferenceField(props: SecretReferenceFieldProps) { · 289 unmodified lines | |||
| 290 | <div className="grid gap-2"> | 290 | <div className="grid gap-2"> |
| 291 | <span className="text-xs font-medium text-foreground">{props.label}</span> | 291 | <span className="text-xs font-medium text-foreground">{props.label}</span> |
| 292 | 292 | ||
| 293 | <button | 293 | <input |
| 294 | type="button" | 294 | value={showFinder ? finderQuery : (selectedSecret ? (selectedSecret.name ?? selectedSecret.id) : "")} |
| 295 | onClick={() => { | 295 | onChange={(event) => { |
| 296 | setShowCreate(false); | 296 | setFinderQuery(event.target.value); |
| 297 | setShowFinder((current) => !current); | 297 | if (!showFinder) { |
| 298 | setShowFinder(true); | ||
| 299 | setShowCreate(false); | ||
| 300 | } | ||
| 298 | }} | 301 | }} |
| 299 | className="flex min-h-9 w-full items-center justify-between gap-3 rounded-lg border border-input bg-background px-3 py-2 text-left text-sm text-foreground outline-none transition-colors hover:bg-accent/30 focus:border-ring focus:ring-1 focus:ring-ring/25" | 302 | onFocus={() => { |
| 300 | > | 303 | if (!showFinder) { |
| 301 | <div className="min-w-0"> | 304 | setShowFinder(true); |
| 302 | <div className="truncate"> | 305 | setShowCreate(false); |
| 303 | {selectedSecret | 306 | } |
| 304 | ? (selectedSecret.name ?? selectedSecret.id) | 307 | }} |
| 305 | : props.emptyLabel} | 308 | onBlur={(event) => { |
| 306 | </div> | 309 | // Don't close if clicking inside the results |
| 307 | {selectedSecret && ( | 310 | if (event.relatedTarget?.closest("[data-secret-results]")) return; |
| 308 | <div className="truncate text-[11px] text-muted-foreground"> | 311 | setShowFinder(false); |
| 309 | {selectedSecret.storeName} · {selectedSecret.storeKind} | 312 | setFinderQuery(""); |
| 310 | </div> | 313 | }} |
| 311 | )} | 314 | placeholder={selectedSecret ? (selectedSecret.name ?? selectedSecret.id) : props.emptyLabel} |
| 312 | </div> | 315 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" |
| 313 | <div className="shrink-0 text-[11px] font-medium text-muted-foreground"> | 316 | /> |
| 314 | {showFinder ? "Close" : "Choose"} | ||
| 315 | </div> | ||
| 316 | </button> | ||
| 317 | |||
| 318 | <div className="flex flex-wrap items-center gap-2"> | ||
| 319 | <button | ||
| 320 | type="button" | ||
| 321 | onClick={() => { | ||
| 322 | setShowFinder(false); | ||
| 323 | setShowCreate((current) => !current); | ||
| 324 | }} | ||
| 325 | className={buttonClassName} | ||
| 326 | > | ||
| 327 | {showCreate ? "Hide create" : "Create new secret"} | ||
| 328 | </button> | ||
| 329 | </div> | ||
| 330 | 317 | ||
| 331 | {showFinder && ( | 318 | {showFinder && ( |
| 332 | <div className="space-y-3 border-l-2 border-border pl-4"> | 319 | <div className="space-y-3" data-secret-results> |
| 333 | <input | ||
| 334 | value={finderQuery} | ||
| 335 | onChange={(event) => setFinderQuery(event.target.value)} | ||
| 336 | placeholder="Search all secrets" | ||
| 337 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 338 | autoFocus | ||
| 339 | /> | ||
| 340 | 320 | ||
| 341 | {finderError && ( | 321 | {finderError && ( |
| 342 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-3 py-2 text-xs text-destructive"> | 322 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-3 py-2 text-xs text-destructive"> |
| @@ -345,6 +325,17 @@ export function SecretReferenceField(props: SecretReferenceFieldProps) { · 2 unmodified lines | |||
| 345 | )} | 325 | )} |
| 346 | 326 | ||
| 347 | <div className="max-h-64 space-y-2 overflow-y-auto pr-1"> | 327 | <div className="max-h-64 space-y-2 overflow-y-auto pr-1"> |
| 328 | <button | ||
| 329 | type="button" | ||
| 330 | onClick={() => { | ||
| 331 | setShowFinder(false); | ||
| 332 | setShowCreate(true); | ||
| 333 | }} | ||
| 334 | className="flex w-full items-start justify-between gap-3 rounded-lg border border-input bg-background px-3 py-2 text-left transition-colors hover:bg-accent/40" | ||
| 335 | > | ||
| 336 | <span className="text-sm text-foreground">Create new secret</span> | ||
| 337 | </button> | ||
| 338 | |||
| 348 | {finderStatus === "pending" && ( | 339 | {finderStatus === "pending" && ( |
| 349 | <div className="rounded-lg border border-border px-3 py-2 text-xs text-muted-foreground"> | 340 | <div className="rounded-lg border border-border px-3 py-2 text-xs text-muted-foreground"> |
| 350 | Loading secrets... | 341 | Loading secrets... |
| @@ -1,44 +0,0 @@ | |||
| 1 | import type { HTMLAttributes } from "react"; | ||
| 2 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 3 | |||
| 4 | import { cn } from "../lib/cn"; | ||
| 5 | |||
| 6 | const badgeVariants = cva( | ||
| 7 | "inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase", | ||
| 8 | { | ||
| 9 | variants: { | ||
| 10 | variant: { | ||
| 11 | default: "border-transparent bg-primary/15 text-primary", | ||
| 12 | secondary: "border-transparent bg-secondary text-secondary-foreground", | ||
| 13 | outline: "border-border text-muted-foreground", | ||
| 14 | muted: "border-transparent bg-muted text-muted-foreground", | ||
| 15 | get: "border-[var(--method-get)]/20 bg-[var(--method-get)]/10 text-[var(--method-get)]", | ||
| 16 | post: "border-[var(--method-post)]/20 bg-[var(--method-post)]/10 text-[var(--method-post)]", | ||
| 17 | put: "border-[var(--method-put)]/20 bg-[var(--method-put)]/10 text-[var(--method-put)]", | ||
| 18 | delete: "border-[var(--method-delete)]/20 bg-[var(--method-delete)]/10 text-[var(--method-delete)]", | ||
| 19 | destructive: "border-destructive/20 bg-destructive/10 text-destructive", | ||
| 20 | }, | ||
| 21 | }, | ||
| 22 | defaultVariants: { | ||
| 23 | variant: "default", | ||
| 24 | }, | ||
| 25 | }, | ||
| 26 | ); | ||
| 27 | |||
| 28 | export type BadgeProps = HTMLAttributes<HTMLSpanElement> & VariantProps<typeof badgeVariants>; | ||
| 29 | |||
| 30 | export function Badge({ className, variant, ...props }: BadgeProps) { | ||
| 31 | return <span className={cn(badgeVariants({ variant }), className)} {...props} />; | ||
| 32 | } | ||
| 33 | |||
| 34 | export function MethodBadge({ method }: { method: string }) { | ||
| 35 | const variant = ({ | ||
| 36 | GET: "get", | ||
| 37 | POST: "post", | ||
| 38 | PUT: "put", | ||
| 39 | PATCH: "put", | ||
| 40 | DELETE: "delete", | ||
| 41 | } as const)[method.toUpperCase()] ?? "outline"; | ||
| 42 | |||
| 43 | return <Badge variant={variant}>{method}</Badge>; | ||
| 44 | } | ||
| @@ -2,6 +2,7 @@ import { useCallback, useEffect, useRef, useState } from "react"; · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | import { codeToHtml, resolveLang } from "../lib/shiki"; | 3 | import { codeToHtml, resolveLang } from "../lib/shiki"; |
| 4 | import { cn } from "../lib/cn"; | 4 | import { cn } from "../lib/cn"; |
| 5 | import { Button } from "./ui/button"; | ||
| 5 | import { IconCheck, IconCopy } from "./icons"; | 6 | import { IconCheck, IconCopy } from "./icons"; |
| 6 | 7 | ||
| 7 | const highlightCache = new Map<string, string>(); | 8 | const highlightCache = new Map<string, string>(); |
| @@ -80,14 +81,16 @@ export function CodeBlock(props: { · 72 unmodified lines | |||
| 80 | 81 | ||
| 81 | return ( | 82 | return ( |
| 82 | <div className={cn("group relative overflow-auto", className)}> | 83 | <div className={cn("group relative overflow-auto", className)}> |
| 83 | <button | 84 | <Button |
| 84 | type="button" | 85 | type="button" |
| 86 | variant="outline" | ||
| 87 | size="icon" | ||
| 85 | onClick={handleCopy} | 88 | onClick={handleCopy} |
| 86 | className="absolute right-2 top-2 z-10 rounded-md border border-border bg-card/90 p-1.5 text-muted-foreground/40 opacity-0 backdrop-blur-sm transition-all hover:text-foreground group-hover:opacity-100" | 89 | className="absolute right-2 top-2 z-10 bg-card/90 p-1.5 text-muted-foreground/40 opacity-0 backdrop-blur-sm hover:text-foreground group-hover:opacity-100" |
| 87 | title="Copy to clipboard" | 90 | title="Copy to clipboard" |
| 88 | > | 91 | > |
| 89 | {copied ? <IconCheck className="size-3" /> : <IconCopy className="size-3" />} | 92 | {copied ? <IconCheck className="size-3" /> : <IconCopy className="size-3" />} |
| 90 | </button> | 93 | </Button> |
| 91 | 94 | ||
| 92 | {html ? ( | 95 | {html ? ( |
| 93 | <div | 96 | <div |
| @@ -7,7 +7,7 @@ import { · 6 unmodified lines | |||
| 7 | useSourceInspection, | 7 | useSourceInspection, |
| 8 | useSourceToolDetail, | 8 | useSourceToolDetail, |
| 9 | } from "../../hooks/sources"; | 9 | } from "../../hooks/sources"; |
| 10 | import { Badge } from "./badge"; | 10 | import { Badge } from "./ui/badge"; |
| 11 | import { LoadableBlock } from "./loadable"; | 11 | import { LoadableBlock } from "./loadable"; |
| 12 | import { | 12 | import { |
| 13 | SourceToolModelWorkbench, | 13 | SourceToolModelWorkbench, |
| @@ -8,7 +8,7 @@ import type { · 7 unmodified lines | |||
| 8 | SourceInspection, | 8 | SourceInspection, |
| 9 | SourceInspectionToolDetail, | 9 | SourceInspectionToolDetail, |
| 10 | } from "@executor/platform-sdk/schema"; | 10 | } from "@executor/platform-sdk/schema"; |
| 11 | import { MethodBadge } from "./badge"; | 11 | import { MethodBadge } from "./ui/badge"; |
| 12 | import { CodeBlock } from "./code-block"; | 12 | import { CodeBlock } from "./code-block"; |
| 13 | import { DocumentPanel } from "./document-panel"; | 13 | import { DocumentPanel } from "./document-panel"; |
| 14 | import { EmptyState, LoadableBlock } from "./loadable"; | 14 | import { EmptyState, LoadableBlock } from "./loadable"; |
| @@ -22,6 +22,8 @@ import { · 7 unmodified lines | |||
| 22 | IconSearch, | 22 | IconSearch, |
| 23 | IconTool, | 23 | IconTool, |
| 24 | } from "./icons"; | 24 | } from "./icons"; |
| 25 | import { Button } from "./ui/button"; | ||
| 26 | import { Input } from "./ui/input"; | ||
| 25 | import { cn } from "../lib/cn"; | 27 | import { cn } from "../lib/cn"; |
| 26 | 28 | ||
| 27 | type ToolTreeNode = { | 29 | type ToolTreeNode = { |
| @@ -173,16 +175,18 @@ const CopyButton = (props: { · 145 unmodified lines | |||
| 173 | copiedField: string | null; | 175 | copiedField: string | null; |
| 174 | onCopy: (text: string, field: string) => void | Promise<void>; | 176 | onCopy: (text: string, field: string) => void | Promise<void>; |
| 175 | }) => ( | 177 | }) => ( |
| 176 | <button | 178 | <Button |
| 177 | type="button" | 179 | type="button" |
| 180 | variant="ghost" | ||
| 181 | size="icon" | ||
| 178 | onClick={() => { | 182 | onClick={() => { |
| 179 | void props.onCopy(props.text, props.field); | 183 | void props.onCopy(props.text, props.field); |
| 180 | }} | 184 | }} |
| 181 | className="shrink-0 rounded p-1 text-muted-foreground/30 transition-colors hover:text-muted-foreground" | 185 | className="size-6 shrink-0 text-muted-foreground/30 hover:text-muted-foreground" |
| 182 | title={`Copy ${props.field}`} | 186 | title={`Copy ${props.field}`} |
| 183 | > | 187 | > |
| 184 | {props.copiedField === props.field ? <IconCheck /> : <IconCopy />} | 188 | {props.copiedField === props.field ? <IconCheck /> : <IconCopy />} |
| 185 | </button> | 189 | </Button> |
| 186 | ); | 190 | ); |
| 187 | 191 | ||
| 188 | const SourceToolTree = (props: { | 192 | const SourceToolTree = (props: { |
| @@ -295,17 +299,19 @@ const SourceToolTreeNodeView = (props: { · 106 unmodified lines | |||
| 295 | <div> | 299 | <div> |
| 296 | {node.tool ? ( | 300 | {node.tool ? ( |
| 297 | <div className="flex items-center"> | 301 | <div className="flex items-center"> |
| 298 | <button | 302 | <Button |
| 299 | type="button" | 303 | type="button" |
| 304 | variant="ghost" | ||
| 305 | size="icon" | ||
| 300 | onClick={() => setOpen((value) => !value)} | 306 | onClick={() => setOpen((value) => !value)} |
| 301 | className="shrink-0 rounded p-0.5 text-muted-foreground/30 hover:text-muted-foreground" | 307 | className="shrink-0 size-auto rounded p-0.5 text-muted-foreground/30 hover:text-muted-foreground" |
| 302 | style={{ marginLeft: paddingLeft }} | 308 | style={{ marginLeft: paddingLeft }} |
| 303 | > | 309 | > |
| 304 | <IconChevron | 310 | <IconChevron |
| 305 | className={cn("shrink-0 transition-transform duration-150", open && "rotate-90")} | 311 | className={cn("shrink-0 transition-transform duration-150", open && "rotate-90")} |
| 306 | style={{ width: 8, height: 8 }} | 312 | style={{ width: 8, height: 8 }} |
| 307 | /> | 313 | /> |
| 308 | </button> | 314 | </Button> |
| 309 | <SourceToolListItem | 315 | <SourceToolListItem |
| 310 | tool={node.tool as SourceInspection["tools"][number]} | 316 | tool={node.tool as SourceInspection["tools"][number]} |
| 311 | active={node.tool?.path === selectedToolPath} | 317 | active={node.tool?.path === selectedToolPath} |
| @@ -318,11 +324,12 @@ const SourceToolTreeNodeView = (props: { · 6 unmodified lines | |||
| 318 | /> | 324 | /> |
| 319 | </div> | 325 | </div> |
| 320 | ) : ( | 326 | ) : ( |
| 321 | <button | 327 | <Button |
| 322 | type="button" | 328 | type="button" |
| 329 | variant="ghost" | ||
| 323 | onClick={() => setOpen((value) => !value)} | 330 | onClick={() => setOpen((value) => !value)} |
| 324 | className={cn( | 331 | className={cn( |
| 325 | "group flex w-full items-center gap-1.5 rounded-md py-1 pr-2.5 text-[12px] transition-colors hover:bg-accent/40", | 332 | "group flex h-auto w-full items-center gap-1.5 rounded-md py-1 pr-2.5 text-[12px] hover:bg-accent/40", |
| 326 | open ? "text-foreground/80" : "text-muted-foreground/60", | 333 | open ? "text-foreground/80" : "text-muted-foreground/60", |
| 327 | )} | 334 | )} |
| 328 | style={{ paddingLeft }} | 335 | style={{ paddingLeft }} |
| @@ -344,7 +351,7 @@ const SourceToolTreeNodeView = (props: { · 15 unmodified lines | |||
| 344 | <span className="shrink-0 tabular-nums text-[10px] text-muted-foreground/25"> | 351 | <span className="shrink-0 tabular-nums text-[10px] text-muted-foreground/25"> |
| 345 | {leafCount} | 352 | {leafCount} |
| 346 | </span> | 353 | </span> |
| 347 | </button> | 354 | </Button> |
| 348 | )} | 355 | )} |
| 349 | 356 | ||
| 350 | {open && hasChildren && ( | 357 | {open && hasChildren && ( |
| @@ -397,15 +404,16 @@ const SourceToolListItem = (props: { · 46 unmodified lines | |||
| 397 | : props.tool.path; | 404 | : props.tool.path; |
| 398 | 405 | ||
| 399 | return ( | 406 | return ( |
| 400 | <button | 407 | <Button |
| 401 | ref={ref} | 408 | ref={ref} |
| 402 | type="button" | 409 | type="button" |
| 410 | variant="ghost" | ||
| 403 | onMouseEnter={() => { | 411 | onMouseEnter={() => { |
| 404 | props.prefetch(props.sourceId, props.tool.path); | 412 | props.prefetch(props.sourceId, props.tool.path); |
| 405 | }} | 413 | }} |
| 406 | onClick={props.onSelect} | 414 | onClick={props.onSelect} |
| 407 | className={cn( | 415 | className={cn( |
| 408 | "group flex w-full items-center gap-2 rounded-md py-1.5 pr-2.5 text-left transition-colors", | 416 | "group flex h-auto w-full items-center gap-2 rounded-md py-1.5 pr-2.5 text-left", |
| 409 | props.active | 417 | props.active |
| 410 | ? "border-l-2 border-l-primary bg-primary/10 text-foreground" | 418 | ? "border-l-2 border-l-primary bg-primary/10 text-foreground" |
| 411 | : "text-foreground/70 hover:bg-accent/50 hover:text-foreground", | 419 | : "text-foreground/70 hover:bg-accent/50 hover:text-foreground", |
| @@ -418,7 +426,7 @@ const SourceToolListItem = (props: { · 6 unmodified lines | |||
| 418 | {highlightMatch(label, props.search)} | 426 | {highlightMatch(label, props.search)} |
| 419 | </span> | 427 | </span> |
| 420 | {props.tool.method && <MethodBadge method={props.tool.method} />} | 428 | {props.tool.method && <MethodBadge method={props.tool.method} />} |
| 421 | </button> | 429 | </Button> |
| 422 | ); | 430 | ); |
| 423 | }; | 431 | }; |
| 424 | 432 | ||
| @@ -599,21 +607,23 @@ export const SourceToolModelWorkbench = ( · 174 unmodified lines | |||
| 599 | <div className="shrink-0 border-b border-border px-3 py-2"> | 607 | <div className="shrink-0 border-b border-border px-3 py-2"> |
| 600 | <div className="flex h-8 items-center gap-2 rounded-md border border-input bg-background px-2.5"> | 608 | <div className="flex h-8 items-center gap-2 rounded-md border border-input bg-background px-2.5"> |
| 601 | <IconSearch className="size-3.5 shrink-0 text-muted-foreground/40" /> | 609 | <IconSearch className="size-3.5 shrink-0 text-muted-foreground/40" /> |
| 602 | <input | 610 | <Input |
| 603 | ref={searchRef} | 611 | ref={searchRef} |
| 604 | value={search} | 612 | value={search} |
| 605 | onChange={(event) => setSearch(event.target.value)} | 613 | onChange={(event) => setSearch(event.target.value)} |
| 606 | placeholder={`Filter ${props.bundle.toolCount} tools...`} | 614 | placeholder={`Filter ${props.bundle.toolCount} tools...`} |
| 607 | className="min-w-0 flex-1 bg-transparent text-[13px] outline-none placeholder:text-muted-foreground/40" | 615 | className="min-w-0 flex-1 border-0 bg-transparent p-0 text-[13px] shadow-none ring-0 focus:border-0 focus:ring-0" |
| 608 | /> | 616 | /> |
| 609 | {search.length > 0 ? ( | 617 | {search.length > 0 ? ( |
| 610 | <button | 618 | <Button |
| 611 | type="button" | 619 | type="button" |
| 620 | variant="ghost" | ||
| 621 | size="icon" | ||
| 612 | onClick={() => setSearch("")} | 622 | onClick={() => setSearch("")} |
| 613 | className="shrink-0 rounded p-0.5 text-muted-foreground/40 hover:text-foreground" | 623 | className="size-5 shrink-0 text-muted-foreground/40 hover:text-foreground" |
| 614 | > | 624 | > |
| 615 | <IconClose /> | 625 | <IconClose /> |
| 616 | </button> | 626 | </Button> |
| 617 | ) : ( | 627 | ) : ( |
| 618 | <kbd className="shrink-0 rounded border border-border bg-muted px-1 py-px text-[10px] leading-none text-muted-foreground/50"> | 628 | <kbd className="shrink-0 rounded border border-border bg-muted px-1 py-px text-[10px] leading-none text-muted-foreground/50"> |
| 619 | / | 629 | / |
| @@ -622,7 +632,7 @@ export const SourceToolModelWorkbench = ( · 2 unmodified lines | |||
| 622 | </div> | 632 | </div> |
| 623 | </div> | 633 | </div> |
| 624 | 634 | ||
| 625 | <div className="flex-1 overflow-y-auto max-w-[300px]"> | 635 | <div className="flex-1 overflow-y-auto"> |
| 626 | {filteredTools.length === 0 ? ( | 636 | {filteredTools.length === 0 ? ( |
| 627 | <div className="p-4 text-center text-[13px] text-muted-foreground/50"> | 637 | <div className="p-4 text-center text-[13px] text-muted-foreground/50"> |
| 628 | {terms.length > 0 ? "No tools match your filter" : "No tools available"} | 638 | {terms.length > 0 ? "No tools match your filter" : "No tools available"} |
| @@ -687,19 +697,16 @@ export const SourceToolDiscoveryPanel = < · 58 unmodified lines | |||
| 687 | > | 697 | > |
| 688 | <div className="relative flex-1"> | 698 | <div className="relative flex-1"> |
| 689 | <IconSearch className="absolute left-3 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground/40" /> | 699 | <IconSearch className="absolute left-3 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground/40" /> |
| 690 | <input | 700 | <Input |
| 691 | value={draftQuery} | 701 | value={draftQuery} |
| 692 | onChange={(event) => setDraftQuery(event.target.value)} | 702 | onChange={(event) => setDraftQuery(event.target.value)} |
| 693 | placeholder="Search tools..." | 703 | placeholder="Search tools..." |
| 694 | className="h-9 w-full rounded-md border border-input bg-background pl-9 pr-3 text-sm outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/30" | 704 | className="pl-9 pr-3 text-sm" |
| 695 | /> | 705 | /> |
| 696 | </div> | 706 | </div> |
| 697 | <button | 707 | <Button type="submit" variant="outline"> |
| 698 | type="submit" | ||
| 699 | className="inline-flex h-9 items-center rounded-md border border-input bg-card px-3 text-xs font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 700 | > | ||
| 701 | Search | 708 | Search |
| 702 | </button> | 709 | </Button> |
| 703 | </form> | 710 | </form> |
| 704 | </div> | 711 | </div> |
| 705 | 712 | ||
| @@ -719,11 +726,12 @@ export const SourceToolDiscoveryPanel = < · 13 unmodified lines | |||
| 719 | ) : ( | 726 | ) : ( |
| 720 | <div className="max-w-3xl space-y-2"> | 727 | <div className="max-w-3xl space-y-2"> |
| 721 | {result.results.map((item, index) => ( | 728 | {result.results.map((item, index) => ( |
| 722 | <button | 729 | <Button |
| 723 | key={item.path} | 730 | key={item.path} |
| 724 | type="button" | 731 | type="button" |
| 732 | variant="outline" | ||
| 725 | onClick={() => props.onOpenTool(item.path)} | 733 | onClick={() => props.onOpenTool(item.path)} |
| 726 | className="group w-full rounded-lg border border-border bg-card/60 p-3.5 text-left transition-all hover:border-primary/30 hover:shadow-sm" | 734 | className="group h-auto w-full rounded-lg bg-card/60 p-3.5 text-left hover:border-primary/30 hover:shadow-sm" |
| 727 | > | 735 | > |
| 728 | <div className="mb-1.5 flex items-center justify-between gap-3"> | 736 | <div className="mb-1.5 flex items-center justify-between gap-3"> |
| 729 | <div className="flex min-w-0 items-center gap-2.5"> | 737 | <div className="flex min-w-0 items-center gap-2.5"> |
| @@ -743,7 +751,7 @@ export const SourceToolDiscoveryPanel = < · 13 unmodified lines | |||
| 743 | {item.description} | 751 | {item.description} |
| 744 | </p> | 752 | </p> |
| 745 | )} | 753 | )} |
| 746 | </button> | 754 | </Button> |
| 747 | ))} | 755 | ))} |
| 748 | </div> | 756 | </div> |
| 749 | ) | 757 | ) |
| @@ -0,0 +1,80 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 3 | |||
| 4 | import { cn } from "../../lib/cn"; | ||
| 5 | |||
| 6 | const alertVariants = cva( | ||
| 7 | "group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", | ||
| 8 | { | ||
| 9 | variants: { | ||
| 10 | variant: { | ||
| 11 | default: "bg-card text-card-foreground", | ||
| 12 | destructive: | ||
| 13 | "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current", | ||
| 14 | warning: | ||
| 15 | "border-amber-500/25 bg-amber-500/8 text-amber-700 dark:text-amber-400", | ||
| 16 | success: | ||
| 17 | "border-primary/25 bg-primary/8 text-primary", | ||
| 18 | }, | ||
| 19 | }, | ||
| 20 | defaultVariants: { | ||
| 21 | variant: "default", | ||
| 22 | }, | ||
| 23 | }, | ||
| 24 | ); | ||
| 25 | |||
| 26 | function Alert({ | ||
| 27 | className, | ||
| 28 | variant, | ||
| 29 | ...props | ||
| 30 | }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) { | ||
| 31 | return ( | ||
| 32 | <div | ||
| 33 | data-slot="alert" | ||
| 34 | role="alert" | ||
| 35 | className={cn(alertVariants({ variant }), className)} | ||
| 36 | {...props} | ||
| 37 | /> | ||
| 38 | ); | ||
| 39 | } | ||
| 40 | |||
| 41 | function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { | ||
| 42 | return ( | ||
| 43 | <div | ||
| 44 | data-slot="alert-title" | ||
| 45 | className={cn( | ||
| 46 | "font-heading font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", | ||
| 47 | className, | ||
| 48 | )} | ||
| 49 | {...props} | ||
| 50 | /> | ||
| 51 | ); | ||
| 52 | } | ||
| 53 | |||
| 54 | function AlertDescription({ | ||
| 55 | className, | ||
| 56 | ...props | ||
| 57 | }: React.ComponentProps<"div">) { | ||
| 58 | return ( | ||
| 59 | <div | ||
| 60 | data-slot="alert-description" | ||
| 61 | className={cn( | ||
| 62 | "text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", | ||
| 63 | className, | ||
| 64 | )} | ||
| 65 | {...props} | ||
| 66 | /> | ||
| 67 | ); | ||
| 68 | } | ||
| 69 | |||
| 70 | function AlertAction({ className, ...props }: React.ComponentProps<"div">) { | ||
| 71 | return ( | ||
| 72 | <div | ||
| 73 | data-slot="alert-action" | ||
| 74 | className={cn("absolute top-2 right-2", className)} | ||
| 75 | {...props} | ||
| 76 | /> | ||
| 77 | ); | ||
| 78 | } | ||
| 79 | |||
| 80 | export { Alert, alertVariants, AlertTitle, AlertDescription, AlertAction }; | ||
| @@ -0,0 +1,57 @@ | |||
| 1 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | const badgeVariants = cva( | ||
| 6 | "inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all [&>svg]:pointer-events-none [&>svg]:size-3!", | ||
| 7 | { | ||
| 8 | variants: { | ||
| 9 | variant: { | ||
| 10 | default: "bg-primary text-primary-foreground", | ||
| 11 | secondary: "bg-secondary text-secondary-foreground", | ||
| 12 | destructive: | ||
| 13 | "bg-destructive/10 text-destructive dark:bg-destructive/20", | ||
| 14 | outline: "border-border text-foreground", | ||
| 15 | muted: "bg-muted text-muted-foreground", | ||
| 16 | get: "border-[var(--method-get)]/20 bg-[var(--method-get)]/10 text-[var(--method-get)]", | ||
| 17 | post: "border-[var(--method-post)]/20 bg-[var(--method-post)]/10 text-[var(--method-post)]", | ||
| 18 | put: "border-[var(--method-put)]/20 bg-[var(--method-put)]/10 text-[var(--method-put)]", | ||
| 19 | delete: | ||
| 20 | "border-[var(--method-delete)]/20 bg-[var(--method-delete)]/10 text-[var(--method-delete)]", | ||
| 21 | }, | ||
| 22 | }, | ||
| 23 | defaultVariants: { | ||
| 24 | variant: "default", | ||
| 25 | }, | ||
| 26 | }, | ||
| 27 | ); | ||
| 28 | |||
| 29 | export type BadgeProps = React.ComponentProps<"span"> & | ||
| 30 | VariantProps<typeof badgeVariants>; | ||
| 31 | |||
| 32 | function Badge({ className, variant, ...props }: BadgeProps) { | ||
| 33 | return ( | ||
| 34 | <span | ||
| 35 | data-slot="badge" | ||
| 36 | className={cn(badgeVariants({ variant }), className)} | ||
| 37 | {...props} | ||
| 38 | /> | ||
| 39 | ); | ||
| 40 | } | ||
| 41 | |||
| 42 | function MethodBadge({ method }: { method: string }) { | ||
| 43 | const variant = | ||
| 44 | ( | ||
| 45 | { | ||
| 46 | GET: "get", | ||
| 47 | POST: "post", | ||
| 48 | PUT: "put", | ||
| 49 | PATCH: "put", | ||
| 50 | DELETE: "delete", | ||
| 51 | } as const | ||
| 52 | )[method.toUpperCase()] ?? "outline"; | ||
| 53 | |||
| 54 | return <Badge variant={variant}>{method}</Badge>; | ||
| 55 | } | ||
| 56 | |||
| 57 | export { Badge, badgeVariants, MethodBadge }; | ||
| @@ -0,0 +1,63 @@ | |||
| 1 | import { Button as ButtonPrimitive } from "@base-ui/react/button"; | ||
| 2 | import { cva, type VariantProps } from "class-variance-authority"; | ||
| 3 | |||
| 4 | import { cn } from "../../lib/cn"; | ||
| 5 | |||
| 6 | const buttonVariants = cva( | ||
| 7 | "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", | ||
| 8 | { | ||
| 9 | variants: { | ||
| 10 | variant: { | ||
| 11 | default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", | ||
| 12 | outline: | ||
| 13 | "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", | ||
| 14 | secondary: | ||
| 15 | "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", | ||
| 16 | ghost: | ||
| 17 | "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", | ||
| 18 | destructive: | ||
| 19 | "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", | ||
| 20 | "destructive-outline": | ||
| 21 | "border-destructive/25 bg-destructive/5 text-destructive hover:bg-destructive/10", | ||
| 22 | link: "text-primary underline-offset-4 hover:underline", | ||
| 23 | }, | ||
| 24 | size: { | ||
| 25 | default: | ||
| 26 | "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", | ||
| 27 | xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", | ||
| 28 | sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", | ||
| 29 | lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", | ||
| 30 | icon: "size-8", | ||
| 31 | "icon-xs": | ||
| 32 | "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", | ||
| 33 | "icon-sm": | ||
| 34 | "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg", | ||
| 35 | "icon-lg": "size-9", | ||
| 36 | }, | ||
| 37 | }, | ||
| 38 | defaultVariants: { | ||
| 39 | variant: "default", | ||
| 40 | size: "default", | ||
| 41 | }, | ||
| 42 | }, | ||
| 43 | ); | ||
| 44 | |||
| 45 | export type ButtonProps = ButtonPrimitive.Props & | ||
| 46 | VariantProps<typeof buttonVariants>; | ||
| 47 | |||
| 48 | function Button({ | ||
| 49 | className, | ||
| 50 | variant = "default", | ||
| 51 | size = "default", | ||
| 52 | ...props | ||
| 53 | }: ButtonProps) { | ||
| 54 | return ( | ||
| 55 | <ButtonPrimitive | ||
| 56 | data-slot="button" | ||
| 57 | className={cn(buttonVariants({ variant, size, className }))} | ||
| 58 | {...props} | ||
| 59 | /> | ||
| 60 | ); | ||
| 61 | } | ||
| 62 | |||
| 63 | export { Button, buttonVariants }; | ||
| @@ -0,0 +1,103 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | function Card({ | ||
| 6 | className, | ||
| 7 | size = "default", | ||
| 8 | ...props | ||
| 9 | }: React.ComponentProps<"div"> & { size?: "default" | "sm" }) { | ||
| 10 | return ( | ||
| 11 | <div | ||
| 12 | data-slot="card" | ||
| 13 | data-size={size} | ||
| 14 | className={cn( | ||
| 15 | "group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", | ||
| 16 | className, | ||
| 17 | )} | ||
| 18 | {...props} | ||
| 19 | /> | ||
| 20 | ); | ||
| 21 | } | ||
| 22 | |||
| 23 | function CardHeader({ className, ...props }: React.ComponentProps<"div">) { | ||
| 24 | return ( | ||
| 25 | <div | ||
| 26 | data-slot="card-header" | ||
| 27 | className={cn( | ||
| 28 | "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3", | ||
| 29 | className, | ||
| 30 | )} | ||
| 31 | {...props} | ||
| 32 | /> | ||
| 33 | ); | ||
| 34 | } | ||
| 35 | |||
| 36 | function CardTitle({ className, ...props }: React.ComponentProps<"div">) { | ||
| 37 | return ( | ||
| 38 | <div | ||
| 39 | data-slot="card-title" | ||
| 40 | className={cn( | ||
| 41 | "font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", | ||
| 42 | className, | ||
| 43 | )} | ||
| 44 | {...props} | ||
| 45 | /> | ||
| 46 | ); | ||
| 47 | } | ||
| 48 | |||
| 49 | function CardDescription({ className, ...props }: React.ComponentProps<"div">) { | ||
| 50 | return ( | ||
| 51 | <div | ||
| 52 | data-slot="card-description" | ||
| 53 | className={cn("text-sm text-muted-foreground", className)} | ||
| 54 | {...props} | ||
| 55 | /> | ||
| 56 | ); | ||
| 57 | } | ||
| 58 | |||
| 59 | function CardAction({ className, ...props }: React.ComponentProps<"div">) { | ||
| 60 | return ( | ||
| 61 | <div | ||
| 62 | data-slot="card-action" | ||
| 63 | className={cn( | ||
| 64 | "col-start-2 row-span-2 row-start-1 self-start justify-self-end", | ||
| 65 | className, | ||
| 66 | )} | ||
| 67 | {...props} | ||
| 68 | /> | ||
| 69 | ); | ||
| 70 | } | ||
| 71 | |||
| 72 | function CardContent({ className, ...props }: React.ComponentProps<"div">) { | ||
| 73 | return ( | ||
| 74 | <div | ||
| 75 | data-slot="card-content" | ||
| 76 | className={cn("px-4 group-data-[size=sm]/card:px-3", className)} | ||
| 77 | {...props} | ||
| 78 | /> | ||
| 79 | ); | ||
| 80 | } | ||
| 81 | |||
| 82 | function CardFooter({ className, ...props }: React.ComponentProps<"div">) { | ||
| 83 | return ( | ||
| 84 | <div | ||
| 85 | data-slot="card-footer" | ||
| 86 | className={cn( | ||
| 87 | "flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3", | ||
| 88 | className, | ||
| 89 | )} | ||
| 90 | {...props} | ||
| 91 | /> | ||
| 92 | ); | ||
| 93 | } | ||
| 94 | |||
| 95 | export { | ||
| 96 | Card, | ||
| 97 | CardHeader, | ||
| 98 | CardFooter, | ||
| 99 | CardTitle, | ||
| 100 | CardAction, | ||
| 101 | CardDescription, | ||
| 102 | CardContent, | ||
| 103 | }; | ||
| @@ -0,0 +1,144 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | import { Command as CommandPrimitive } from "cmdk"; | ||
| 3 | |||
| 4 | import { cn } from "../../lib/cn"; | ||
| 5 | import { IconSearch } from "../icons"; | ||
| 6 | |||
| 7 | function Command({ | ||
| 8 | className, | ||
| 9 | ...props | ||
| 10 | }: React.ComponentProps<typeof CommandPrimitive>) { | ||
| 11 | return ( | ||
| 12 | <CommandPrimitive | ||
| 13 | data-slot="command" | ||
| 14 | className={cn( | ||
| 15 | "flex size-full flex-col overflow-hidden rounded-xl bg-popover p-1 text-popover-foreground", | ||
| 16 | className, | ||
| 17 | )} | ||
| 18 | {...props} | ||
| 19 | /> | ||
| 20 | ); | ||
| 21 | } | ||
| 22 | |||
| 23 | function CommandInput({ | ||
| 24 | className, | ||
| 25 | ...props | ||
| 26 | }: React.ComponentProps<typeof CommandPrimitive.Input>) { | ||
| 27 | return ( | ||
| 28 | <div | ||
| 29 | data-slot="command-input-wrapper" | ||
| 30 | className="flex items-center gap-2 border-b border-border px-2.5 pb-2" | ||
| 31 | > | ||
| 32 | <IconSearch className="size-3.5 shrink-0 opacity-50" /> | ||
| 33 | <CommandPrimitive.Input | ||
| 34 | data-slot="command-input" | ||
| 35 | className={cn( | ||
| 36 | "w-full bg-transparent text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50", | ||
| 37 | className, | ||
| 38 | )} | ||
| 39 | {...props} | ||
| 40 | /> | ||
| 41 | </div> | ||
| 42 | ); | ||
| 43 | } | ||
| 44 | |||
| 45 | function CommandList({ | ||
| 46 | className, | ||
| 47 | ...props | ||
| 48 | }: React.ComponentProps<typeof CommandPrimitive.List>) { | ||
| 49 | return ( | ||
| 50 | <CommandPrimitive.List | ||
| 51 | data-slot="command-list" | ||
| 52 | className={cn( | ||
| 53 | "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", | ||
| 54 | className, | ||
| 55 | )} | ||
| 56 | {...props} | ||
| 57 | /> | ||
| 58 | ); | ||
| 59 | } | ||
| 60 | |||
| 61 | function CommandEmpty({ | ||
| 62 | className, | ||
| 63 | ...props | ||
| 64 | }: React.ComponentProps<typeof CommandPrimitive.Empty>) { | ||
| 65 | return ( | ||
| 66 | <CommandPrimitive.Empty | ||
| 67 | data-slot="command-empty" | ||
| 68 | className={cn("py-6 text-center text-sm", className)} | ||
| 69 | {...props} | ||
| 70 | /> | ||
| 71 | ); | ||
| 72 | } | ||
| 73 | |||
| 74 | function CommandGroup({ | ||
| 75 | className, | ||
| 76 | ...props | ||
| 77 | }: React.ComponentProps<typeof CommandPrimitive.Group>) { | ||
| 78 | return ( | ||
| 79 | <CommandPrimitive.Group | ||
| 80 | data-slot="command-group" | ||
| 81 | className={cn( | ||
| 82 | "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", | ||
| 83 | className, | ||
| 84 | )} | ||
| 85 | {...props} | ||
| 86 | /> | ||
| 87 | ); | ||
| 88 | } | ||
| 89 | |||
| 90 | function CommandSeparator({ | ||
| 91 | className, | ||
| 92 | ...props | ||
| 93 | }: React.ComponentProps<typeof CommandPrimitive.Separator>) { | ||
| 94 | return ( | ||
| 95 | <CommandPrimitive.Separator | ||
| 96 | data-slot="command-separator" | ||
| 97 | className={cn("-mx-1 h-px bg-border", className)} | ||
| 98 | {...props} | ||
| 99 | /> | ||
| 100 | ); | ||
| 101 | } | ||
| 102 | |||
| 103 | function CommandItem({ | ||
| 104 | className, | ||
| 105 | ...props | ||
| 106 | }: React.ComponentProps<typeof CommandPrimitive.Item>) { | ||
| 107 | return ( | ||
| 108 | <CommandPrimitive.Item | ||
| 109 | data-slot="command-item" | ||
| 110 | className={cn( | ||
| 111 | "group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", | ||
| 112 | className, | ||
| 113 | )} | ||
| 114 | {...props} | ||
| 115 | /> | ||
| 116 | ); | ||
| 117 | } | ||
| 118 | |||
| 119 | function CommandShortcut({ | ||
| 120 | className, | ||
| 121 | ...props | ||
| 122 | }: React.ComponentProps<"span">) { | ||
| 123 | return ( | ||
| 124 | <span | ||
| 125 | data-slot="command-shortcut" | ||
| 126 | className={cn( | ||
| 127 | "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", | ||
| 128 | className, | ||
| 129 | )} | ||
| 130 | {...props} | ||
| 131 | /> | ||
| 132 | ); | ||
| 133 | } | ||
| 134 | |||
| 135 | export { | ||
| 136 | Command, | ||
| 137 | CommandInput, | ||
| 138 | CommandList, | ||
| 139 | CommandEmpty, | ||
| 140 | CommandGroup, | ||
| 141 | CommandItem, | ||
| 142 | CommandShortcut, | ||
| 143 | CommandSeparator, | ||
| 144 | }; | ||
| @@ -0,0 +1,159 @@ | |||
| 1 | "use client" | ||
| 2 | |||
| 3 | import * as React from "react" | ||
| 4 | import { Dialog as DialogPrimitive } from "@base-ui/react/dialog" | ||
| 5 | |||
| 6 | import { cn } from "../../lib/cn" | ||
| 7 | import { Button } from "./button" | ||
| 8 | import { IconClose } from "../icons" | ||
| 9 | |||
| 10 | function Dialog({ ...props }: DialogPrimitive.Root.Props) { | ||
| 11 | return <DialogPrimitive.Root data-slot="dialog" {...props} /> | ||
| 12 | } | ||
| 13 | |||
| 14 | function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) { | ||
| 15 | return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} /> | ||
| 16 | } | ||
| 17 | |||
| 18 | function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) { | ||
| 19 | return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} /> | ||
| 20 | } | ||
| 21 | |||
| 22 | function DialogClose({ ...props }: DialogPrimitive.Close.Props) { | ||
| 23 | return <DialogPrimitive.Close data-slot="dialog-close" {...props} /> | ||
| 24 | } | ||
| 25 | |||
| 26 | function DialogOverlay({ | ||
| 27 | className, | ||
| 28 | ...props | ||
| 29 | }: DialogPrimitive.Backdrop.Props) { | ||
| 30 | return ( | ||
| 31 | <DialogPrimitive.Backdrop | ||
| 32 | data-slot="dialog-overlay" | ||
| 33 | className={cn( | ||
| 34 | "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", | ||
| 35 | className | ||
| 36 | )} | ||
| 37 | {...props} | ||
| 38 | /> | ||
| 39 | ) | ||
| 40 | } | ||
| 41 | |||
| 42 | function DialogContent({ | ||
| 43 | className, | ||
| 44 | children, | ||
| 45 | showCloseButton = true, | ||
| 46 | ...props | ||
| 47 | }: DialogPrimitive.Popup.Props & { | ||
| 48 | showCloseButton?: boolean | ||
| 49 | }) { | ||
| 50 | return ( | ||
| 51 | <DialogPortal> | ||
| 52 | <DialogOverlay /> | ||
| 53 | <DialogPrimitive.Popup | ||
| 54 | data-slot="dialog-content" | ||
| 55 | className={cn( | ||
| 56 | "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", | ||
| 57 | className | ||
| 58 | )} | ||
| 59 | {...props} | ||
| 60 | > | ||
| 61 | {children} | ||
| 62 | {showCloseButton && ( | ||
| 63 | <DialogPrimitive.Close | ||
| 64 | data-slot="dialog-close" | ||
| 65 | render={ | ||
| 66 | <Button | ||
| 67 | variant="ghost" | ||
| 68 | className="absolute top-2 right-2" | ||
| 69 | size="icon-sm" | ||
| 70 | /> | ||
| 71 | } | ||
| 72 | > | ||
| 73 | <IconClose className="size-3.5" /> | ||
| 74 | <span className="sr-only">Close</span> | ||
| 75 | </DialogPrimitive.Close> | ||
| 76 | )} | ||
| 77 | </DialogPrimitive.Popup> | ||
| 78 | </DialogPortal> | ||
| 79 | ) | ||
| 80 | } | ||
| 81 | |||
| 82 | function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { | ||
| 83 | return ( | ||
| 84 | <div | ||
| 85 | data-slot="dialog-header" | ||
| 86 | className={cn("flex flex-col gap-2", className)} | ||
| 87 | {...props} | ||
| 88 | /> | ||
| 89 | ) | ||
| 90 | } | ||
| 91 | |||
| 92 | function DialogFooter({ | ||
| 93 | className, | ||
| 94 | showCloseButton = false, | ||
| 95 | children, | ||
| 96 | ...props | ||
| 97 | }: React.ComponentProps<"div"> & { | ||
| 98 | showCloseButton?: boolean | ||
| 99 | }) { | ||
| 100 | return ( | ||
| 101 | <div | ||
| 102 | data-slot="dialog-footer" | ||
| 103 | className={cn( | ||
| 104 | "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", | ||
| 105 | className | ||
| 106 | )} | ||
| 107 | {...props} | ||
| 108 | > | ||
| 109 | {children} | ||
| 110 | {showCloseButton && ( | ||
| 111 | <DialogPrimitive.Close render={<Button variant="outline" />}> | ||
| 112 | Close | ||
| 113 | </DialogPrimitive.Close> | ||
| 114 | )} | ||
| 115 | </div> | ||
| 116 | ) | ||
| 117 | } | ||
| 118 | |||
| 119 | function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { | ||
| 120 | return ( | ||
| 121 | <DialogPrimitive.Title | ||
| 122 | data-slot="dialog-title" | ||
| 123 | className={cn( | ||
| 124 | "text-base leading-none font-medium", | ||
| 125 | className | ||
| 126 | )} | ||
| 127 | {...props} | ||
| 128 | /> | ||
| 129 | ) | ||
| 130 | } | ||
| 131 | |||
| 132 | function DialogDescription({ | ||
| 133 | className, | ||
| 134 | ...props | ||
| 135 | }: DialogPrimitive.Description.Props) { | ||
| 136 | return ( | ||
| 137 | <DialogPrimitive.Description | ||
| 138 | data-slot="dialog-description" | ||
| 139 | className={cn( | ||
| 140 | "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", | ||
| 141 | className | ||
| 142 | )} | ||
| 143 | {...props} | ||
| 144 | /> | ||
| 145 | ) | ||
| 146 | } | ||
| 147 | |||
| 148 | export { | ||
| 149 | Dialog, | ||
| 150 | DialogClose, | ||
| 151 | DialogContent, | ||
| 152 | DialogDescription, | ||
| 153 | DialogFooter, | ||
| 154 | DialogHeader, | ||
| 155 | DialogOverlay, | ||
| 156 | DialogPortal, | ||
| 157 | DialogTitle, | ||
| 158 | DialogTrigger, | ||
| 159 | } | ||
| @@ -0,0 +1,26 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | import { Input as InputPrimitive } from "@base-ui/react/input"; | ||
| 3 | |||
| 4 | import { cn } from "../../lib/cn"; | ||
| 5 | |||
| 6 | const Input = React.forwardRef< | ||
| 7 | HTMLInputElement, | ||
| 8 | React.ComponentProps<"input"> | ||
| 9 | >(({ className, type, ...props }, ref) => { | ||
| 10 | return ( | ||
| 11 | <InputPrimitive | ||
| 12 | ref={ref} | ||
| 13 | type={type} | ||
| 14 | data-slot="input" | ||
| 15 | className={cn( | ||
| 16 | "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", | ||
| 17 | className, | ||
| 18 | )} | ||
| 19 | {...props} | ||
| 20 | /> | ||
| 21 | ); | ||
| 22 | }); | ||
| 23 | |||
| 24 | Input.displayName = "Input"; | ||
| 25 | |||
| 26 | export { Input }; | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | function Label({ className, ...props }: React.ComponentProps<"label">) { | ||
| 6 | return ( | ||
| 7 | <label | ||
| 8 | data-slot="label" | ||
| 9 | className={cn( | ||
| 10 | "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", | ||
| 11 | className, | ||
| 12 | )} | ||
| 13 | {...props} | ||
| 14 | /> | ||
| 15 | ); | ||
| 16 | } | ||
| 17 | |||
| 18 | export { Label }; | ||
| @@ -0,0 +1,48 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | import { Popover as PopoverPrimitive } from "@base-ui/react/popover"; | ||
| 3 | |||
| 4 | import { cn } from "../../lib/cn"; | ||
| 5 | |||
| 6 | function Popover({ ...props }: PopoverPrimitive.Root.Props) { | ||
| 7 | return <PopoverPrimitive.Root data-slot="popover" {...props} />; | ||
| 8 | } | ||
| 9 | |||
| 10 | function PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) { | ||
| 11 | return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />; | ||
| 12 | } | ||
| 13 | |||
| 14 | function PopoverContent({ | ||
| 15 | className, | ||
| 16 | align = "center", | ||
| 17 | alignOffset = 0, | ||
| 18 | side = "bottom", | ||
| 19 | sideOffset = 4, | ||
| 20 | ...props | ||
| 21 | }: PopoverPrimitive.Popup.Props & | ||
| 22 | Pick< | ||
| 23 | PopoverPrimitive.Positioner.Props, | ||
| 24 | "align" | "alignOffset" | "side" | "sideOffset" | ||
| 25 | >) { | ||
| 26 | return ( | ||
| 27 | <PopoverPrimitive.Portal> | ||
| 28 | <PopoverPrimitive.Positioner | ||
| 29 | align={align} | ||
| 30 | alignOffset={alignOffset} | ||
| 31 | side={side} | ||
| 32 | sideOffset={sideOffset} | ||
| 33 | className="isolate z-50" | ||
| 34 | > | ||
| 35 | <PopoverPrimitive.Popup | ||
| 36 | data-slot="popover-content" | ||
| 37 | className={cn( | ||
| 38 | "z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", | ||
| 39 | className, | ||
| 40 | )} | ||
| 41 | {...props} | ||
| 42 | /> | ||
| 43 | </PopoverPrimitive.Positioner> | ||
| 44 | </PopoverPrimitive.Portal> | ||
| 45 | ); | ||
| 46 | } | ||
| 47 | |||
| 48 | export { Popover, PopoverContent, PopoverTrigger }; | ||
| @@ -0,0 +1,24 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | function Select({ | ||
| 6 | className, | ||
| 7 | children, | ||
| 8 | ...props | ||
| 9 | }: React.ComponentProps<"select">) { | ||
| 10 | return ( | ||
| 11 | <select | ||
| 12 | data-slot="select" | ||
| 13 | className={cn( | ||
| 14 | "h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-base outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30", | ||
| 15 | className, | ||
| 16 | )} | ||
| 17 | {...props} | ||
| 18 | > | ||
| 19 | {children} | ||
| 20 | </select> | ||
| 21 | ); | ||
| 22 | } | ||
| 23 | |||
| 24 | export { Select }; | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | function Separator({ | ||
| 6 | className, | ||
| 7 | orientation = "horizontal", | ||
| 8 | ...props | ||
| 9 | }: SeparatorPrimitive.Props) { | ||
| 10 | return ( | ||
| 11 | <SeparatorPrimitive | ||
| 12 | data-slot="separator" | ||
| 13 | orientation={orientation} | ||
| 14 | className={cn( | ||
| 15 | "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", | ||
| 16 | className, | ||
| 17 | )} | ||
| 18 | {...props} | ||
| 19 | /> | ||
| 20 | ); | ||
| 21 | } | ||
| 22 | |||
| 23 | export { Separator }; | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | import * as React from "react"; | ||
| 2 | |||
| 3 | import { cn } from "../../lib/cn"; | ||
| 4 | |||
| 5 | function Textarea({ className, ...props }: React.ComponentProps<"textarea">) { | ||
| 6 | return ( | ||
| 7 | <textarea | ||
| 8 | data-slot="textarea" | ||
| 9 | className={cn( | ||
| 10 | "flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", | ||
| 11 | className, | ||
| 12 | )} | ||
| 13 | {...props} | ||
| 14 | /> | ||
| 15 | ); | ||
| 16 | } | ||
| 17 | |||
| 18 | export { Textarea }; | ||
| @@ -63,10 +63,6 @@ export { · 62 unmodified lines | |||
| 63 | cn, | 63 | cn, |
| 64 | } from "./lib/cn"; | 64 | } from "./lib/cn"; |
| 65 | 65 | ||
| 66 | export { | ||
| 67 | Badge, | ||
| 68 | MethodBadge, | ||
| 69 | } from "./components/badge"; | ||
| 70 | export { | 66 | export { |
| 71 | CodeBlock, | 67 | CodeBlock, |
| 72 | } from "./components/code-block"; | 68 | } from "./components/code-block"; |
| @@ -106,3 +102,16 @@ export { · 33 unmodified lines | |||
| 106 | type SourceToolDetailPanelProps, | 102 | type SourceToolDetailPanelProps, |
| 107 | type SourceToolDiscoveryResult, | 103 | type SourceToolDiscoveryResult, |
| 108 | } from "./components/source-tool-workbench"; | 104 | } from "./components/source-tool-workbench"; |
| 105 | |||
| 106 | // ── UI primitives (shadcn/ui) ──────────────────────────────────────────── | ||
| 107 | export { Alert, alertVariants, AlertTitle, AlertDescription, AlertAction } from "./components/ui/alert"; | ||
| 108 | export { Badge, badgeVariants, MethodBadge, type BadgeProps } from "./components/ui/badge"; | ||
| 109 | export { Button, buttonVariants, type ButtonProps } from "./components/ui/button"; | ||
| 110 | export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent } from "./components/ui/card"; | ||
| 111 | export { Input } from "./components/ui/input"; | ||
| 112 | export { Label } from "./components/ui/label"; | ||
| 113 | export { Select } from "./components/ui/select"; | ||
| 114 | export { Separator } from "./components/ui/separator"; | ||
| 115 | export { Textarea } from "./components/ui/textarea"; | ||
| 116 | export { Popover, PopoverContent, PopoverTrigger } from "./components/ui/popover"; | ||
| 117 | export { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator } from "./components/ui/command"; | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | import { clsx, type ClassValue } from "clsx"; | ||
| 2 | import { twMerge } from "tailwind-merge"; | ||
| 3 | |||
| 4 | export function cn(...inputs: ReadonlyArray<ClassValue>): string { | ||
| 5 | return twMerge(clsx(inputs)); | ||
| 6 | } | ||
| @@ -8,7 +8,11 @@ · 7 unmodified lines | |||
| 8 | "noEmit": true, | 8 | "noEmit": true, |
| 9 | "lib": ["ES2022", "DOM"], | 9 | "lib": ["ES2022", "DOM"], |
| 10 | "jsx": "react-jsx", | 10 | "jsx": "react-jsx", |
| 11 | "types": ["bun-types"] | 11 | "types": ["bun-types"], |
| 12 | "baseUrl": ".", | ||
| 13 | "paths": { | ||
| 14 | "@/*": ["./src/plugins/*"] | ||
| 15 | } | ||
| 12 | }, | 16 | }, |
| 13 | "include": [ | 17 | "include": [ |
| 14 | "src/**/*.ts", | 18 | "src/**/*.ts", |
| @@ -7,7 +7,10 @@ import { · 6 unmodified lines | |||
| 7 | useExecutions, | 7 | useExecutions, |
| 8 | } from "@executor/react"; | 8 | } from "@executor/react"; |
| 9 | import { | 9 | import { |
| 10 | Alert, | ||
| 10 | Badge, | 11 | Badge, |
| 12 | Button, | ||
| 13 | Card, | ||
| 11 | DocumentPanel, | 14 | DocumentPanel, |
| 12 | EmptyState, | 15 | EmptyState, |
| 13 | LoadableBlock, | 16 | LoadableBlock, |
| @@ -81,12 +84,12 @@ const MetadataItem = (props: { · 67 unmodified lines | |||
| 81 | label: string; | 84 | label: string; |
| 82 | value: string; | 85 | value: string; |
| 83 | }) => ( | 86 | }) => ( |
| 84 | <div className="rounded-lg border border-border bg-card/60 px-3 py-2"> | 87 | <Card className="bg-card/60 px-3 py-2"> |
| 85 | <div className="text-[10px] font-medium uppercase tracking-wider text-muted-foreground/70"> | 88 | <div className="text-[10px] font-medium uppercase tracking-wider text-muted-foreground/70"> |
| 86 | {props.label} | 89 | {props.label} |
| 87 | </div> | 90 | </div> |
| 88 | <div className="mt-1 text-sm text-foreground">{props.value}</div> | 91 | <div className="mt-1 text-sm text-foreground">{props.value}</div> |
| 89 | </div> | 92 | </Card> |
| 90 | ); | 93 | ); |
| 91 | 94 | ||
| 92 | const ExecutionCard = (props: { | 95 | const ExecutionCard = (props: { |
| @@ -96,10 +99,11 @@ const ExecutionCard = (props: { · 3 unmodified lines | |||
| 96 | const { execution } = props; | 99 | const { execution } = props; |
| 97 | 100 | ||
| 98 | return ( | 101 | return ( |
| 99 | <button | 102 | <Button |
| 103 | variant="ghost" | ||
| 100 | type="button" | 104 | type="button" |
| 101 | onClick={props.onOpen} | 105 | onClick={props.onOpen} |
| 102 | className="w-full rounded-2xl border border-border bg-card px-5 py-4 text-left transition-colors hover:border-primary/25 hover:bg-card/90" | 106 | className="h-auto w-full rounded-2xl border border-border bg-card px-5 py-4 text-left transition-colors hover:border-primary/25 hover:bg-card/90" |
| 103 | > | 107 | > |
| 104 | <div className="flex items-start justify-between gap-3"> | 108 | <div className="flex items-start justify-between gap-3"> |
| 105 | <div className="min-w-0 flex-1"> | 109 | <div className="min-w-0 flex-1"> |
| @@ -122,11 +126,11 @@ const ExecutionCard = (props: { · 16 unmodified lines | |||
| 122 | </div> | 126 | </div> |
| 123 | 127 | ||
| 124 | {execution.errorText && ( | 128 | {execution.errorText && ( |
| 125 | <div className="mt-3 rounded-lg border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive"> | 129 | <Alert variant="destructive" className="mt-3 text-xs"> |
| 126 | {execution.errorText} | 130 | {execution.errorText} |
| 127 | </div> | 131 | </Alert> |
| 128 | )} | 132 | )} |
| 129 | </button> | 133 | </Button> |
| 130 | ); | 134 | ); |
| 131 | }; | 135 | }; |
| 132 | 136 | ||
| @@ -275,15 +279,16 @@ export function ExecutionHistoryDetailPage() { · 142 unmodified lines | |||
| 275 | <div className="mx-auto max-w-6xl px-6 py-10 lg:px-10 lg:py-14"> | 279 | <div className="mx-auto max-w-6xl px-6 py-10 lg:px-10 lg:py-14"> |
| 276 | <div className="mb-8 flex flex-wrap items-center justify-between gap-4"> | 280 | <div className="mb-8 flex flex-wrap items-center justify-between gap-4"> |
| 277 | <div> | 281 | <div> |
| 278 | <button | 282 | <Button |
| 283 | variant="ghost" | ||
| 279 | type="button" | 284 | type="button" |
| 280 | onClick={() => { | 285 | onClick={() => { |
| 281 | void navigation.route(); | 286 | void navigation.route(); |
| 282 | }} | 287 | }} |
| 283 | className="mb-3 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground" | 288 | className="mb-3 h-auto p-0 text-xs font-medium uppercase tracking-wider text-muted-foreground transition-colors hover:text-foreground" |
| 284 | > | 289 | > |
| 285 | Back to history | 290 | Back to history |
| 286 | </button> | 291 | </Button> |
| 287 | <div className="flex items-center gap-3"> | 292 | <div className="flex items-center gap-3"> |
| 288 | <h1 className="font-display text-2xl tracking-tight text-foreground lg:text-3xl"> | 293 | <h1 className="font-display text-2xl tracking-tight text-foreground lg:text-3xl"> |
| 289 | {executionId} | 294 | {executionId} |
| @@ -11,9 +11,17 @@ import { · 10 unmodified lines | |||
| 11 | useSource, | 11 | useSource, |
| 12 | } from "@executor/react"; | 12 | } from "@executor/react"; |
| 13 | import { | 13 | import { |
| 14 | Alert, | ||
| 14 | Badge, | 15 | Badge, |
| 16 | Button, | ||
| 17 | Card, | ||
| 15 | IconPencil, | 18 | IconPencil, |
| 19 | Input, | ||
| 20 | Label, | ||
| 21 | Select, | ||
| 22 | Separator, | ||
| 16 | SourceToolExplorer, | 23 | SourceToolExplorer, |
| 24 | Textarea, | ||
| 17 | parseSourceToolExplorerSearch, | 25 | parseSourceToolExplorerSearch, |
| 18 | type SourceToolExplorerSearch, | 26 | type SourceToolExplorerSearch, |
| 19 | useSourcePluginNavigation, | 27 | useSourcePluginNavigation, |
| @@ -565,80 +573,74 @@ function GoogleDiscoverySourceForm(props: { · 545 unmodified lines | |||
| 565 | }; | 573 | }; |
| 566 | 574 | ||
| 567 | return ( | 575 | return ( |
| 568 | <div className="space-y-6 rounded-xl border border-border p-6"> | 576 | <Card className="space-y-6 p-6"> |
| 569 | <div className="grid gap-4 sm:grid-cols-2"> | 577 | <div className="grid gap-4 sm:grid-cols-2"> |
| 570 | <label className="grid gap-2 sm:col-span-2"> | 578 | <div className="grid gap-2 sm:col-span-2"> |
| 571 | <span className="text-xs font-medium text-foreground">Name</span> | 579 | <Label>Name</Label> |
| 572 | <input | 580 | <Input |
| 573 | value={name} | 581 | value={name} |
| 574 | onChange={(event) => setName(event.target.value)} | 582 | onChange={(event) => setName(event.target.value)} |
| 575 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 576 | /> | 583 | /> |
| 577 | </label> | 584 | </div> |
| 578 | <label className="grid gap-2"> | 585 | <div className="grid gap-2"> |
| 579 | <span className="text-xs font-medium text-foreground">Service</span> | 586 | <Label>Service</Label> |
| 580 | <input | 587 | <Input |
| 581 | value={service} | 588 | value={service} |
| 582 | onChange={(event) => setService(event.target.value)} | 589 | onChange={(event) => setService(event.target.value)} |
| 583 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 584 | /> | 590 | /> |
| 585 | </label> | 591 | </div> |
| 586 | <label className="grid gap-2"> | 592 | <div className="grid gap-2"> |
| 587 | <span className="text-xs font-medium text-foreground">Version</span> | 593 | <Label>Version</Label> |
| 588 | <input | 594 | <Input |
| 589 | value={version} | 595 | value={version} |
| 590 | onChange={(event) => setVersion(event.target.value)} | 596 | onChange={(event) => setVersion(event.target.value)} |
| 591 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 592 | /> | 597 | /> |
| 593 | </label> | 598 | </div> |
| 594 | <label className="grid gap-2 sm:col-span-2"> | 599 | <div className="grid gap-2 sm:col-span-2"> |
| 595 | <span className="text-xs font-medium text-foreground">Discovery URL</span> | 600 | <Label>Discovery URL</Label> |
| 596 | <input | 601 | <Input |
| 597 | value={discoveryUrl} | 602 | value={discoveryUrl} |
| 598 | onChange={(event) => setDiscoveryUrl(event.target.value)} | 603 | onChange={(event) => setDiscoveryUrl(event.target.value)} |
| 599 | placeholder={defaultGoogleDiscoveryUrl(service || "sheets", version || "v4")} | 604 | placeholder={defaultGoogleDiscoveryUrl(service || "sheets", version || "v4")} |
| 600 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 605 | className="font-mono text-xs" |
| 601 | /> | 606 | /> |
| 602 | </label> | 607 | </div> |
| 603 | </div> | 608 | </div> |
| 604 | 609 | ||
| 605 | <label className="grid gap-2"> | 610 | <div className="grid gap-2"> |
| 606 | <span className="text-xs font-medium text-foreground">Default Headers</span> | 611 | <Label>Default Headers</Label> |
| 607 | <textarea | 612 | <Textarea |
| 608 | value={headersText} | 613 | value={headersText} |
| 609 | onChange={(event) => setHeadersText(event.target.value)} | 614 | onChange={(event) => setHeadersText(event.target.value)} |
| 610 | rows={3} | 615 | rows={3} |
| 611 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 612 | /> | 616 | /> |
| 613 | </label> | 617 | </div> |
| 614 | 618 | ||
| 615 | <label className="grid gap-2"> | 619 | <div className="grid gap-2"> |
| 616 | <span className="text-xs font-medium text-foreground">Scopes</span> | 620 | <Label>Scopes</Label> |
| 617 | <textarea | 621 | <Textarea |
| 618 | value={scopesText} | 622 | value={scopesText} |
| 619 | onChange={(event) => setScopesText(event.target.value)} | 623 | onChange={(event) => setScopesText(event.target.value)} |
| 620 | rows={3} | 624 | rows={3} |
| 621 | placeholder="Leave blank to infer from the discovery document." | 625 | placeholder="Leave blank to infer from the discovery document." |
| 622 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 623 | /> | 626 | /> |
| 624 | </label> | 627 | </div> |
| 625 | 628 | ||
| 626 | <label className="grid gap-2"> | 629 | <div className="grid gap-2"> |
| 627 | <span className="text-xs font-medium text-foreground">Auth</span> | 630 | <Label>Auth</Label> |
| 628 | <select | 631 | <Select |
| 629 | value={authKind} | 632 | value={authKind} |
| 630 | onChange={(event) => | 633 | onChange={(event) => |
| 631 | setAuthKind(event.target.value as GoogleDiscoveryConnectionAuth["kind"])} | 634 | setAuthKind(event.target.value as GoogleDiscoveryConnectionAuth["kind"])} |
| 632 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 633 | > | 635 | > |
| 634 | <option value="none">None</option> | 636 | <option value="none">None</option> |
| 635 | <option value="bearer">Bearer Secret</option> | 637 | <option value="bearer">Bearer Secret</option> |
| 636 | <option value="oauth2">Google OAuth</option> | 638 | <option value="oauth2">Google OAuth</option> |
| 637 | </select> | 639 | </Select> |
| 638 | </label> | 640 | </div> |
| 639 | 641 | ||
| 640 | {authKind === "bearer" && ( | 642 | {authKind === "bearer" && ( |
| 641 | <div className="border-l-2 border-border pl-4"> | 643 | <div className="rounded-lg border border-border bg-muted/20 p-4"> |
| 642 | <SecretReferenceField | 644 | <SecretReferenceField |
| 643 | label="Secret" | 645 | label="Secret" |
| 644 | value={bearerSecretRef} | 646 | value={bearerSecretRef} |
| @@ -651,15 +653,14 @@ function GoogleDiscoverySourceForm(props: { · 6 unmodified lines | |||
| 651 | )} | 653 | )} |
| 652 | 654 | ||
| 653 | {authKind === "oauth2" && ( | 655 | {authKind === "oauth2" && ( |
| 654 | <div className="space-y-4 border-l-2 border-border pl-4"> | 656 | <div className="space-y-4 rounded-lg border border-border bg-muted/20 p-4"> |
| 655 | <label className="grid gap-2"> | 657 | <div className="grid gap-2"> |
| 656 | <span className="text-xs font-medium text-foreground">Client ID</span> | 658 | <Label>Client ID</Label> |
| 657 | <input | 659 | <Input |
| 658 | value={clientId} | 660 | value={clientId} |
| 659 | onChange={(event) => setClientId(event.target.value)} | 661 | onChange={(event) => setClientId(event.target.value)} |
| 660 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 661 | /> | 662 | /> |
| 662 | </label> | 663 | </div> |
| 663 | <SecretReferenceField | 664 | <SecretReferenceField |
| 664 | label="Client Secret" | 665 | label="Client Secret" |
| 665 | value={clientSecretRef} | 666 | value={clientSecretRef} |
| @@ -669,7 +670,8 @@ function GoogleDiscoverySourceForm(props: { · 3 unmodified lines | |||
| 669 | onChange={setClientSecretRef} | 670 | onChange={setClientSecretRef} |
| 670 | /> | 671 | /> |
| 671 | <div className="flex items-center gap-3"> | 672 | <div className="flex items-center gap-3"> |
| 672 | <button | 673 | <Button |
| 674 | variant="outline" | ||
| 673 | type="button" | 675 | type="button" |
| 674 | onClick={() => { | 676 | onClick={() => { |
| 675 | void (async () => { | 677 | void (async () => { |
| @@ -685,14 +687,13 @@ function GoogleDiscoverySourceForm(props: { · 9 unmodified lines | |||
| 685 | })(); | 687 | })(); |
| 686 | }} | 688 | }} |
| 687 | disabled={oauthStatus === "pending"} | 689 | disabled={oauthStatus === "pending"} |
| 688 | className="inline-flex h-9 items-center justify-center rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50" | ||
| 689 | > | 690 | > |
| 690 | {oauthStatus === "pending" | 691 | {oauthStatus === "pending" |
| 691 | ? "Connecting..." | 692 | ? "Connecting..." |
| 692 | : oauthStatus === "connected" | 693 | : oauthStatus === "connected" |
| 693 | ? "Reconnect" | 694 | ? "Reconnect" |
| 694 | : "Connect with Google"} | 695 | : "Connect with Google"} |
| 695 | </button> | 696 | </Button> |
| 696 | {oauthStatus === "connected" && ( | 697 | {oauthStatus === "connected" && ( |
| 697 | <span className="text-xs text-primary">Connected</span> | 698 | <span className="text-xs text-primary">Connected</span> |
| 698 | )} | 699 | )} |
| @@ -701,13 +702,13 @@ function GoogleDiscoverySourceForm(props: { · 2 unmodified lines | |||
| 701 | )} | 702 | )} |
| 702 | 703 | ||
| 703 | {error && ( | 704 | {error && ( |
| 704 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-sm text-destructive"> | 705 | <Alert variant="destructive"> |
| 705 | {error} | 706 | {error} |
| 706 | </div> | 707 | </Alert> |
| 707 | )} | 708 | )} |
| 708 | 709 | ||
| 709 | <div className="flex items-center justify-end"> | 710 | <div className="flex items-center justify-end"> |
| 710 | <button | 711 | <Button |
| 711 | type="button" | 712 | type="button" |
| 712 | onClick={() => { | 713 | onClick={() => { |
| 713 | void (async () => { | 714 | void (async () => { |
| @@ -746,14 +747,13 @@ function GoogleDiscoverySourceForm(props: { · 32 unmodified lines | |||
| 746 | })(); | 747 | })(); |
| 747 | }} | 748 | }} |
| 748 | disabled={submitMutation.status === "pending"} | 749 | disabled={submitMutation.status === "pending"} |
| 749 | className="inline-flex h-9 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50" | ||
| 750 | > | 750 | > |
| 751 | {submitMutation.status === "pending" | 751 | {submitMutation.status === "pending" |
| 752 | ? props.mode === "create" ? "Creating..." : "Saving..." | 752 | ? props.mode === "create" ? "Creating..." : "Saving..." |
| 753 | : props.mode === "create" ? "Create Source" : "Save Changes"} | 753 | : props.mode === "create" ? "Create Source" : "Save Changes"} |
| 754 | </button> | 754 | </Button> |
| 755 | </div> | 755 | </div> |
| 756 | </div> | 756 | </Card> |
| 757 | ); | 757 | ); |
| 758 | } | 758 | } |
| 759 | 759 | ||
| @@ -857,7 +857,7 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 97 unmodified lines | |||
| 857 | }; | 857 | }; |
| 858 | 858 | ||
| 859 | return ( | 859 | return ( |
| 860 | <div className="space-y-6 rounded-xl border border-border p-6"> | 860 | <Card className="space-y-6 p-6"> |
| 861 | <div> | 861 | <div> |
| 862 | <h2 className="text-base font-semibold text-foreground"> | 862 | <h2 className="text-base font-semibold text-foreground"> |
| 863 | Connect multiple Google APIs | 863 | Connect multiple Google APIs |
| @@ -874,14 +874,17 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 10 unmodified lines | |||
| 874 | : `${selectedTemplates.length} Google API${selectedTemplates.length === 1 ? "" : "s"} selected.`} | 874 | : `${selectedTemplates.length} Google API${selectedTemplates.length === 1 ? "" : "s"} selected.`} |
| 875 | </div> | 875 | </div> |
| 876 | <div className="flex items-center gap-2"> | 876 | <div className="flex items-center gap-2"> |
| 877 | <button | 877 | <Button |
| 878 | variant="outline" | ||
| 879 | size="sm" | ||
| 878 | type="button" | 880 | type="button" |
| 879 | onClick={() => setSelectedTemplateIds([])} | 881 | onClick={() => setSelectedTemplateIds([])} |
| 880 | className="inline-flex h-8 items-center justify-center rounded-lg border border-input bg-card px-3 text-xs font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 881 | > | 882 | > |
| 882 | Clear | 883 | Clear |
| 883 | </button> | 884 | </Button> |
| 884 | <button | 885 | <Button |
| 886 | variant="outline" | ||
| 887 | size="sm" | ||
| 885 | type="button" | 888 | type="button" |
| 886 | onClick={() => | 889 | onClick={() => |
| 887 | setSelectedTemplateIds( | 890 | setSelectedTemplateIds( |
| @@ -890,12 +893,11 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 2 unmodified lines | |||
| 890 | : GOOGLE_DISCOVERY_BATCH_TEMPLATES.map((template) => template.id), | 893 | : GOOGLE_DISCOVERY_BATCH_TEMPLATES.map((template) => template.id), |
| 891 | ) | 894 | ) |
| 892 | } | 895 | } |
| 893 | className="inline-flex h-8 items-center justify-center rounded-lg border border-input bg-card px-3 text-xs font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 894 | > | 896 | > |
| 895 | {selectedTemplateIds.length === GOOGLE_DISCOVERY_BATCH_TEMPLATES.length | 897 | {selectedTemplateIds.length === GOOGLE_DISCOVERY_BATCH_TEMPLATES.length |
| 896 | ? "Deselect all" | 898 | ? "Deselect all" |
| 897 | : "Select all"} | 899 | : "Select all"} |
| 898 | </button> | 900 | </Button> |
| 899 | </div> | 901 | </div> |
| 900 | </div> | 902 | </div> |
| 901 | 903 | ||
| @@ -905,14 +907,15 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 3 unmodified lines | |||
| 905 | const iconUrl = getGoogleDiscoveryIconUrlForService(template.service); | 907 | const iconUrl = getGoogleDiscoveryIconUrlForService(template.service); |
| 906 | 908 | ||
| 907 | return ( | 909 | return ( |
| 908 | <button | 910 | <Button |
| 909 | key={template.id} | 911 | key={template.id} |
| 912 | variant="ghost" | ||
| 910 | type="button" | 913 | type="button" |
| 911 | onClick={() => toggleTemplate(template.id)} | 914 | onClick={() => toggleTemplate(template.id)} |
| 912 | className={ | 915 | className={ |
| 913 | selected | 916 | selected |
| 914 | ? "rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 text-left transition-colors" | 917 | ? "h-auto rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 text-left" |
| 915 | : "rounded-lg border border-border px-4 py-3 text-left transition-colors hover:bg-accent/40" | 918 | : "h-auto rounded-lg border border-border px-4 py-3 text-left hover:bg-accent/40" |
| 916 | } | 919 | } |
| 917 | > | 920 | > |
| 918 | <div className="flex items-start gap-3"> | 921 | <div className="flex items-start gap-3"> |
| @@ -954,21 +957,20 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 35 unmodified lines | |||
| 954 | </div> | 957 | </div> |
| 955 | </div> | 958 | </div> |
| 956 | </div> | 959 | </div> |
| 957 | </button> | 960 | </Button> |
| 958 | ); | 961 | ); |
| 959 | })} | 962 | })} |
| 960 | </div> | 963 | </div> |
| 961 | 964 | ||
| 962 | <div className="grid gap-4 md:grid-cols-2"> | 965 | <div className="grid gap-4 md:grid-cols-2"> |
| 963 | <label className="grid gap-2 md:col-span-2"> | 966 | <div className="grid gap-2 md:col-span-2"> |
| 964 | <span className="text-xs font-medium text-foreground">Client ID</span> | 967 | <Label>Client ID</Label> |
| 965 | <input | 968 | <Input |
| 966 | value={clientId} | 969 | value={clientId} |
| 967 | onChange={(event) => setClientId(event.target.value)} | 970 | onChange={(event) => setClientId(event.target.value)} |
| 968 | placeholder="1234567890-abcdef.apps.googleusercontent.com" | 971 | placeholder="1234567890-abcdef.apps.googleusercontent.com" |
| 969 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 970 | /> | 972 | /> |
| 971 | </label> | 973 | </div> |
| 972 | <div className="md:col-span-2"> | 974 | <div className="md:col-span-2"> |
| 973 | <SecretReferenceField | 975 | <SecretReferenceField |
| 974 | label="Client Secret" | 976 | label="Client Secret" |
| @@ -982,13 +984,13 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 7 unmodified lines | |||
| 982 | </div> | 984 | </div> |
| 983 | 985 | ||
| 984 | {error && ( | 986 | {error && ( |
| 985 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-3 text-sm text-destructive"> | 987 | <Alert variant="destructive"> |
| 986 | {error} | 988 | {error} |
| 987 | </div> | 989 | </Alert> |
| 988 | )} | 990 | )} |
| 989 | 991 | ||
| 990 | <div className="flex items-center justify-end gap-3"> | 992 | <div className="flex items-center justify-end gap-3"> |
| 991 | <button | 993 | <Button |
| 992 | type="button" | 994 | type="button" |
| 993 | onClick={() => { | 995 | onClick={() => { |
| 994 | void handleConnect(); | 996 | void handleConnect(); |
| @@ -998,16 +1000,15 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 3 unmodified lines | |||
| 998 | || selectedTemplates.length === 0 | 1000 | || selectedTemplates.length === 0 |
| 999 | || clientId.trim().length === 0 | 1001 | || clientId.trim().length === 0 |
| 1000 | } | 1002 | } |
| 1001 | className="inline-flex h-9 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50" | ||
| 1002 | > | 1003 | > |
| 1003 | {status === "connecting" | 1004 | {status === "connecting" |
| 1004 | ? "Connecting..." | 1005 | ? "Connecting..." |
| 1005 | : selectedTemplates.length > 0 | 1006 | : selectedTemplates.length > 0 |
| 1006 | ? `Connect ${selectedTemplates.length} Google API${selectedTemplates.length === 1 ? "" : "s"}` | 1007 | ? `Connect ${selectedTemplates.length} Google API${selectedTemplates.length === 1 ? "" : "s"}` |
| 1007 | : "Connect Google APIs"} | 1008 | : "Connect Google APIs"} |
| 1008 | </button> | 1009 | </Button> |
| 1009 | </div> | 1010 | </div> |
| 1010 | </div> | 1011 | </Card> |
| 1011 | ); | 1012 | ); |
| 1012 | } | 1013 | } |
| 1013 | 1014 | ||
| @@ -1043,11 +1044,11 @@ export function GoogleDiscoveryAddPage() { · 29 unmodified lines | |||
| 1043 | /> | 1044 | /> |
| 1044 | 1045 | ||
| 1045 | <div className="flex items-center gap-3"> | 1046 | <div className="flex items-center gap-3"> |
| 1046 | <div className="h-px flex-1 bg-border" /> | 1047 | <Separator className="flex-1" /> |
| 1047 | <div className="text-xs font-medium text-muted-foreground"> | 1048 | <div className="text-xs font-medium text-muted-foreground"> |
| 1048 | or add a single API | 1049 | or add a single API |
| 1049 | </div> | 1050 | </div> |
| 1050 | <div className="h-px flex-1 bg-border" /> | 1051 | <Separator className="flex-1" /> |
| 1051 | </div> | 1052 | </div> |
| 1052 | 1053 | ||
| 1053 | <GoogleDiscoverySourceForm | 1054 | <GoogleDiscoverySourceForm |
| @@ -1108,9 +1109,9 @@ export function GoogleDiscoveryEditPage(props: { · 54 unmodified lines | |||
| 1108 | 1109 | ||
| 1109 | if (Result.isFailure(configResult)) { | 1110 | if (Result.isFailure(configResult)) { |
| 1110 | return ( | 1111 | return ( |
| 1111 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-3 text-sm text-destructive"> | 1112 | <Alert variant="destructive"> |
| 1112 | Failed loading source configuration. | 1113 | Failed loading source configuration. |
| 1113 | </div> | 1114 | </Alert> |
| 1114 | ); | 1115 | ); |
| 1115 | } | 1116 | } |
| 1116 | 1117 | ||
| @@ -1238,48 +1239,48 @@ export function GoogleDiscoveryDetailPage(props: { · 121 unmodified lines | |||
| 1238 | summary={summary} | 1239 | summary={summary} |
| 1239 | actions={( | 1240 | actions={( |
| 1240 | <> | 1241 | <> |
| 1241 | <button | 1242 | <Button |
| 1243 | variant="outline" | ||
| 1242 | type="button" | 1244 | type="button" |
| 1243 | onClick={() => | 1245 | onClick={() => |
| 1244 | void navigation.edit(props.source.id)} | 1246 | void navigation.edit(props.source.id)} |
| 1245 | className="inline-flex h-9 items-center gap-1.5 rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 1246 | > | 1247 | > |
| 1247 | <IconPencil className="size-3.5" /> | 1248 | <IconPencil className="size-3.5" /> |
| 1248 | Edit | 1249 | Edit |
| 1249 | </button> | 1250 | </Button> |
| 1250 | {confirmDelete ? ( | 1251 | {confirmDelete ? ( |
| 1251 | <div className="flex items-center gap-2"> | 1252 | <div className="flex items-center gap-2"> |
| 1252 | <span className="text-xs font-medium text-destructive"> | 1253 | <span className="text-xs font-medium text-destructive"> |
| 1253 | Confirm delete? | 1254 | Confirm delete? |
| 1254 | </span> | 1255 | </span> |
| 1255 | <button | 1256 | <Button |
| 1257 | variant="outline" | ||
| 1256 | type="button" | 1258 | type="button" |
| 1257 | onClick={() => setConfirmDelete(false)} | 1259 | onClick={() => setConfirmDelete(false)} |
| 1258 | disabled={isDeleting} | 1260 | disabled={isDeleting} |
| 1259 | className="inline-flex h-9 items-center rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50" | ||
| 1260 | > | 1261 | > |
| 1261 | Cancel | 1262 | Cancel |
| 1262 | </button> | 1263 | </Button> |
| 1263 | <button | 1264 | <Button |
| 1265 | variant="destructive-outline" | ||
| 1264 | type="button" | 1266 | type="button" |
| 1265 | onClick={() => { | 1267 | onClick={() => { |
| 1266 | void handleDelete().catch(() => {}); | 1268 | void handleDelete().catch(() => {}); |
| 1267 | }} | 1269 | }} |
| 1268 | disabled={isDeleting} | 1270 | disabled={isDeleting} |
| 1269 | className="inline-flex h-9 items-center rounded-lg border border-destructive/25 bg-destructive/5 px-3 text-sm font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 1270 | > | 1271 | > |
| 1271 | {isDeleting ? "Deleting..." : "Delete"} | 1272 | {isDeleting ? "Deleting..." : "Delete"} |
| 1272 | </button> | 1273 | </Button> |
| 1273 | </div> | 1274 | </div> |
| 1274 | ) : ( | 1275 | ) : ( |
| 1275 | <button | 1276 | <Button |
| 1277 | variant="destructive-outline" | ||
| 1276 | type="button" | 1278 | type="button" |
| 1277 | onClick={() => setConfirmDelete(true)} | 1279 | onClick={() => setConfirmDelete(true)} |
| 1278 | disabled={isDeleting} | 1280 | disabled={isDeleting} |
| 1279 | className="inline-flex h-9 items-center rounded-lg border border-destructive/25 bg-destructive/5 px-3 text-sm font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 1280 | > | 1281 | > |
| 1281 | Delete | 1282 | Delete |
| 1282 | </button> | 1283 | </Button> |
| 1283 | )} | 1284 | )} |
| 1284 | </> | 1285 | </> |
| 1285 | )} | 1286 | )} |
| @@ -14,10 +14,17 @@ import { · 13 unmodified lines | |||
| 14 | useSource, | 14 | useSource, |
| 15 | } from "@executor/react"; | 15 | } from "@executor/react"; |
| 16 | import { | 16 | import { |
| 17 | Alert, | ||
| 17 | Badge, | 18 | Badge, |
| 19 | Button, | ||
| 20 | Card, | ||
| 18 | IconPencil, | 21 | IconPencil, |
| 22 | Input, | ||
| 23 | Label, | ||
| 24 | Select, | ||
| 19 | SourceToolDetailPanel, | 25 | SourceToolDetailPanel, |
| 20 | SourceToolExplorer, | 26 | SourceToolExplorer, |
| 27 | Textarea, | ||
| 21 | parseSourceToolExplorerSearch, | 28 | parseSourceToolExplorerSearch, |
| 22 | useSourcePluginRouteParams, | 29 | useSourcePluginRouteParams, |
| 23 | type SourceToolExplorerSearch, | 30 | type SourceToolExplorerSearch, |
| @@ -207,52 +214,49 @@ function GraphqlSourceForm(props: { · 183 unmodified lines | |||
| 207 | const [error, setError] = useState<string | null>(null); | 214 | const [error, setError] = useState<string | null>(null); |
| 208 | 215 | ||
| 209 | return ( | 216 | return ( |
| 210 | <div className="space-y-6 rounded-xl border border-border p-6"> | 217 | <Card className="space-y-6 p-6"> |
| 211 | <div className="grid gap-4"> | 218 | <div className="grid gap-4"> |
| 212 | <label className="grid gap-2"> | 219 | <div className="grid gap-2"> |
| 213 | <span className="text-xs font-medium text-foreground">Name</span> | 220 | <Label>Name</Label> |
| 214 | <input | 221 | <Input |
| 215 | value={name} | 222 | value={name} |
| 216 | onChange={(event) => setName(event.target.value)} | 223 | onChange={(event) => setName(event.target.value)} |
| 217 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 218 | /> | 224 | /> |
| 219 | </label> | 225 | </div> |
| 220 | 226 | ||
| 221 | <label className="grid gap-2"> | 227 | <div className="grid gap-2"> |
| 222 | <span className="text-xs font-medium text-foreground">Endpoint</span> | 228 | <Label>Endpoint</Label> |
| 223 | <input | 229 | <Input |
| 224 | value={endpoint} | 230 | value={endpoint} |
| 225 | onChange={(event) => setEndpoint(event.target.value)} | 231 | onChange={(event) => setEndpoint(event.target.value)} |
| 226 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 232 | className="font-mono text-xs" |
| 227 | /> | 233 | /> |
| 228 | </label> | 234 | </div> |
| 229 | 235 | ||
| 230 | <label className="grid gap-2"> | 236 | <div className="grid gap-2"> |
| 231 | <span className="text-xs font-medium text-foreground">Default Headers</span> | 237 | <Label>Default Headers</Label> |
| 232 | <textarea | 238 | <Textarea |
| 233 | value={headersText} | 239 | value={headersText} |
| 234 | onChange={(event) => setHeadersText(event.target.value)} | 240 | onChange={(event) => setHeadersText(event.target.value)} |
| 235 | rows={3} | 241 | rows={3} |
| 236 | placeholder='{"x-api-version":"2026-03-23"}' | 242 | placeholder='{"x-api-version":"2026-03-23"}' |
| 237 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 238 | /> | 243 | /> |
| 239 | </label> | 244 | </div> |
| 240 | 245 | ||
| 241 | <label className="grid gap-2"> | 246 | <div className="grid gap-2"> |
| 242 | <span className="text-xs font-medium text-foreground">Auth</span> | 247 | <Label>Auth</Label> |
| 243 | <select | 248 | <Select |
| 244 | value={authKind} | 249 | value={authKind} |
| 245 | onChange={(event) => | 250 | onChange={(event) => |
| 246 | setAuthKind(event.target.value as GraphqlConnectionAuth["kind"])} | 251 | setAuthKind(event.target.value as GraphqlConnectionAuth["kind"])} |
| 247 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 248 | > | 252 | > |
| 249 | <option value="none">None</option> | 253 | <option value="none">None</option> |
| 250 | <option value="bearer">Bearer Secret</option> | 254 | <option value="bearer">Bearer Secret</option> |
| 251 | </select> | 255 | </Select> |
| 252 | </label> | 256 | </div> |
| 253 | 257 | ||
| 254 | {authKind === "bearer" && ( | 258 | {authKind === "bearer" && ( |
| 255 | <div className="space-y-4 border-l-2 border-border pl-4"> | 259 | <div className="space-y-4 rounded-lg border border-border bg-muted/20 p-4"> |
| 256 | <SecretReferenceField | 260 | <SecretReferenceField |
| 257 | label="Secret" | 261 | label="Secret" |
| 258 | value={secretRef} | 262 | value={secretRef} |
| @@ -263,38 +267,38 @@ function GraphqlSourceForm(props: { · 4 unmodified lines | |||
| 263 | /> | 267 | /> |
| 264 | 268 | ||
| 265 | <div className="grid gap-4 sm:grid-cols-2"> | 269 | <div className="grid gap-4 sm:grid-cols-2"> |
| 266 | <label className="grid gap-2"> | 270 | <div className="grid gap-2"> |
| 267 | <span className="text-xs font-medium text-foreground">Header Name</span> | 271 | <Label>Header Name</Label> |
| 268 | <input | 272 | <Input |
| 269 | value={authHeaderName} | 273 | value={authHeaderName} |
| 270 | onChange={(event) => setAuthHeaderName(event.target.value)} | 274 | onChange={(event) => setAuthHeaderName(event.target.value)} |
| 271 | placeholder={DEFAULT_BEARER_HEADER_NAME} | 275 | placeholder={DEFAULT_BEARER_HEADER_NAME} |
| 272 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 276 | className="font-mono text-xs" |
| 273 | /> | 277 | /> |
| 274 | </label> | 278 | </div> |
| 275 | 279 | ||
| 276 | <label className="grid gap-2"> | 280 | <div className="grid gap-2"> |
| 277 | <span className="text-xs font-medium text-foreground">Prefix</span> | 281 | <Label>Prefix</Label> |
| 278 | <input | 282 | <Input |
| 279 | value={authPrefix} | 283 | value={authPrefix} |
| 280 | onChange={(event) => setAuthPrefix(event.target.value)} | 284 | onChange={(event) => setAuthPrefix(event.target.value)} |
| 281 | placeholder={DEFAULT_BEARER_PREFIX} | 285 | placeholder={DEFAULT_BEARER_PREFIX} |
| 282 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 286 | className="font-mono text-xs" |
| 283 | /> | 287 | /> |
| 284 | </label> | 288 | </div> |
| 285 | </div> | 289 | </div> |
| 286 | </div> | 290 | </div> |
| 287 | )} | 291 | )} |
| 288 | </div> | 292 | </div> |
| 289 | 293 | ||
| 290 | {error && ( | 294 | {error && ( |
| 291 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-sm text-destructive"> | 295 | <Alert variant="destructive"> |
| 292 | {error} | 296 | {error} |
| 293 | </div> | 297 | </Alert> |
| 294 | )} | 298 | )} |
| 295 | 299 | ||
| 296 | <div className="flex items-center justify-end"> | 300 | <div className="flex items-center justify-end"> |
| 297 | <button | 301 | <Button |
| 298 | type="button" | 302 | type="button" |
| 299 | onClick={() => { | 303 | onClick={() => { |
| 300 | void (async () => { | 304 | void (async () => { |
| @@ -317,14 +321,13 @@ function GraphqlSourceForm(props: { · 16 unmodified lines | |||
| 317 | })(); | 321 | })(); |
| 318 | }} | 322 | }} |
| 319 | disabled={submitMutation.status === "pending"} | 323 | disabled={submitMutation.status === "pending"} |
| 320 | className="inline-flex h-9 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50" | ||
| 321 | > | 324 | > |
| 322 | {submitMutation.status === "pending" | 325 | {submitMutation.status === "pending" |
| 323 | ? props.mode === "create" ? "Creating..." : "Saving..." | 326 | ? props.mode === "create" ? "Creating..." : "Saving..." |
| 324 | : props.mode === "create" ? "Create Source" : "Save Changes"} | 327 | : props.mode === "create" ? "Create Source" : "Save Changes"} |
| 325 | </button> | 328 | </Button> |
| 326 | </div> | 329 | </div> |
| 327 | </div> | 330 | </Card> |
| 328 | ); | 331 | ); |
| 329 | } | 332 | } |
| 330 | 333 | ||
| @@ -400,9 +403,9 @@ export function GraphqlEditPage(props: { · 69 unmodified lines | |||
| 400 | 403 | ||
| 401 | if (Result.isFailure(configResult)) { | 404 | if (Result.isFailure(configResult)) { |
| 402 | return ( | 405 | return ( |
| 403 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-3 text-sm text-destructive"> | 406 | <Alert variant="destructive"> |
| 404 | Failed loading source configuration. | 407 | Failed loading source configuration. |
| 405 | </div> | 408 | </Alert> |
| 406 | ); | 409 | ); |
| 407 | } | 410 | } |
| 408 | 411 | ||
| @@ -556,47 +559,47 @@ function GraphqlDetailExplorer(props: { · 147 unmodified lines | |||
| 556 | ) : undefined} | 559 | ) : undefined} |
| 557 | actions={( | 560 | actions={( |
| 558 | <> | 561 | <> |
| 559 | <button | 562 | <Button |
| 560 | type="button" | 563 | variant="outline" |
| 564 | size="sm" | ||
| 561 | onClick={() => void navigation.edit(props.source.id)} | 565 | onClick={() => void navigation.edit(props.source.id)} |
| 562 | className="inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground" | ||
| 563 | > | 566 | > |
| 564 | <IconPencil className="size-3" /> | 567 | <IconPencil className="size-3" /> |
| 565 | Edit | 568 | Edit |
| 566 | </button> | 569 | </Button> |
| 567 | {confirmDelete ? ( | 570 | {confirmDelete ? ( |
| 568 | <div className="flex items-center gap-2"> | 571 | <div className="flex items-center gap-2"> |
| 569 | <span className="text-[11px] font-medium text-destructive"> | 572 | <span className="text-[11px] font-medium text-destructive"> |
| 570 | Confirm delete? | 573 | Confirm delete? |
| 571 | </span> | 574 | </span> |
| 572 | <button | 575 | <Button |
| 573 | type="button" | 576 | variant="outline" |
| 577 | size="sm" | ||
| 574 | onClick={() => setConfirmDelete(false)} | 578 | onClick={() => setConfirmDelete(false)} |
| 575 | disabled={isDeleting} | 579 | disabled={isDeleting} |
| 576 | className="inline-flex items-center rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground disabled:pointer-events-none disabled:opacity-50" | ||
| 577 | > | 580 | > |
| 578 | Cancel | 581 | Cancel |
| 579 | </button> | 582 | </Button> |
| 580 | <button | 583 | <Button |
| 581 | type="button" | 584 | variant="destructive-outline" |
| 585 | size="sm" | ||
| 582 | onClick={() => { | 586 | onClick={() => { |
| 583 | void handleDelete().catch(() => {}); | 587 | void handleDelete().catch(() => {}); |
| 584 | }} | 588 | }} |
| 585 | disabled={isDeleting} | 589 | disabled={isDeleting} |
| 586 | className="inline-flex items-center rounded-md border border-destructive/25 bg-destructive/5 px-2.5 py-1 text-[12px] font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 587 | > | 590 | > |
| 588 | {isDeleting ? "Deleting..." : "Delete"} | 591 | {isDeleting ? "Deleting..." : "Delete"} |
| 589 | </button> | 592 | </Button> |
| 590 | </div> | 593 | </div> |
| 591 | ) : ( | 594 | ) : ( |
| 592 | <button | 595 | <Button |
| 593 | type="button" | 596 | variant="destructive-outline" |
| 597 | size="sm" | ||
| 594 | onClick={() => setConfirmDelete(true)} | 598 | onClick={() => setConfirmDelete(true)} |
| 595 | disabled={isDeleting} | 599 | disabled={isDeleting} |
| 596 | className="inline-flex items-center rounded-md border border-destructive/25 bg-destructive/5 px-2.5 py-1 text-[12px] font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 597 | > | 600 | > |
| 598 | Delete | 601 | Delete |
| 599 | </button> | 602 | </Button> |
| 600 | )} | 603 | )} |
| 601 | </> | 604 | </> |
| 602 | )} | 605 | )} |
| @@ -7,6 +7,9 @@ import { · 6 unmodified lines | |||
| 7 | useSources, | 7 | useSources, |
| 8 | } from "@executor/react"; | 8 | } from "@executor/react"; |
| 9 | import { | 9 | import { |
| 10 | Alert, | ||
| 11 | Button, | ||
| 12 | Card, | ||
| 10 | SourceToolExplorer, | 13 | SourceToolExplorer, |
| 11 | parseSourceToolExplorerSearch, | 14 | parseSourceToolExplorerSearch, |
| 12 | useSourcePluginNavigation, | 15 | useSourcePluginNavigation, |
| @@ -116,7 +119,7 @@ export function LocalToolsAddPage() { · 103 unmodified lines | |||
| 116 | 119 | ||
| 117 | return ( | 120 | return ( |
| 118 | <div className="mx-auto w-full max-w-3xl px-6 py-10"> | 121 | <div className="mx-auto w-full max-w-3xl px-6 py-10"> |
| 119 | <div className="rounded-2xl border border-border bg-card p-6"> | 122 | <Card className="p-6"> |
| 120 | <h1 className="font-display text-2xl tracking-tight text-foreground"> | 123 | <h1 className="font-display text-2xl tracking-tight text-foreground"> |
| 121 | Local Tools | 124 | Local Tools |
| 122 | </h1> | 125 | </h1> |
| @@ -125,7 +128,7 @@ export function LocalToolsAddPage() { · 2 unmodified lines | |||
| 125 | {" "}into a first-class source with inspection and discovery. | 128 | {" "}into a first-class source with inspection and discovery. |
| 126 | </p> | 129 | </p> |
| 127 | 130 | ||
| 128 | <div className="mt-6 rounded-xl border border-border/70 bg-background/60 p-4 text-sm text-muted-foreground"> | 131 | <Card className="mt-6 bg-background/60 p-4 text-sm text-muted-foreground"> |
| 129 | <p> | 132 | <p> |
| 130 | The source is provisioned automatically when the executor session starts and finds | 133 | The source is provisioned automatically when the executor session starts and finds |
| 131 | local tool files in <code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools</code>. | 134 | local tool files in <code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools</code>. |
| @@ -135,11 +138,12 @@ export function LocalToolsAddPage() { · 3 unmodified lines | |||
| 135 | {" "}<code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools/demo.ts</code> | 138 | {" "}<code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools/demo.ts</code> |
| 136 | {" "}still appears as <code className="rounded bg-muted px-1 py-0.5 font-mono">tools.demo(...)</code>. | 139 | {" "}still appears as <code className="rounded bg-muted px-1 py-0.5 font-mono">tools.demo(...)</code>. |
| 137 | </p> | 140 | </p> |
| 138 | </div> | 141 | </Card> |
| 139 | 142 | ||
| 140 | <div className="mt-6 flex flex-wrap items-center gap-3"> | 143 | <div className="mt-6 flex flex-wrap items-center gap-3"> |
| 141 | {localToolsSource ? ( | 144 | {localToolsSource ? ( |
| 142 | <button | 145 | <Button |
| 146 | size="lg" | ||
| 143 | type="button" | 147 | type="button" |
| 144 | onClick={() => { | 148 | onClick={() => { |
| 145 | startTransition(() => { | 149 | startTransition(() => { |
| @@ -148,19 +152,18 @@ export function LocalToolsAddPage() { · 2 unmodified lines | |||
| 148 | }); | 152 | }); |
| 149 | }); | 153 | }); |
| 150 | }} | 154 | }} |
| 151 | className="inline-flex h-10 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90" | ||
| 152 | > | 155 | > |
| 153 | Open Local Tools Source | 156 | Open Local Tools Source |
| 154 | </button> | 157 | </Button> |
| 155 | ) : ( | 158 | ) : ( |
| 156 | <div className="rounded-lg border border-amber-500/25 bg-amber-500/8 px-4 py-2.5 text-sm text-amber-700"> | 159 | <Alert variant="warning"> |
| 157 | No local tools source is active yet. Create a tool in | 160 | No local tools source is active yet. Create a tool in |
| 158 | {" "}<code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools</code> | 161 | {" "}<code className="rounded bg-muted px-1 py-0.5 font-mono">.executor/tools</code> |
| 159 | {" "}and restart the executor session. | 162 | {" "}and restart the executor session. |
| 160 | </div> | 163 | </Alert> |
| 161 | )} | 164 | )} |
| 162 | </div> | 165 | </div> |
| 163 | </div> | 166 | </Card> |
| 164 | </div> | 167 | </div> |
| 165 | ); | 168 | ); |
| 166 | } | 169 | } |
| @@ -10,12 +10,20 @@ import { · 9 unmodified lines | |||
| 10 | useSource, | 10 | useSource, |
| 11 | } from "@executor/react"; | 11 | } from "@executor/react"; |
| 12 | import { | 12 | import { |
| 13 | Alert, | ||
| 13 | Badge, | 14 | Badge, |
| 15 | Button, | ||
| 16 | Card, | ||
| 17 | cn, | ||
| 14 | IconCheck, | 18 | IconCheck, |
| 15 | IconPencil, | 19 | IconPencil, |
| 16 | IconSearch, | 20 | IconSearch, |
| 17 | IconSpinner, | 21 | IconSpinner, |
| 22 | Input, | ||
| 23 | Label, | ||
| 24 | Select, | ||
| 18 | SourceToolExplorer, | 25 | SourceToolExplorer, |
| 26 | Textarea, | ||
| 19 | parseSourceToolExplorerSearch, | 27 | parseSourceToolExplorerSearch, |
| 20 | type SourceToolExplorerSearch, | 28 | type SourceToolExplorerSearch, |
| 21 | useSourcePluginNavigation, | 29 | useSourcePluginNavigation, |
| @@ -584,7 +592,7 @@ function McpSourceForm(props: { · 562 unmodified lines | |||
| 584 | return ( | 592 | return ( |
| 585 | <div className="space-y-8"> | 593 | <div className="space-y-8"> |
| 586 | {props.mode === "create" && ( | 594 | {props.mode === "create" && ( |
| 587 | <div className="rounded-xl border border-border p-6"> | 595 | <Card className="p-6"> |
| 588 | <div className="text-sm font-medium text-foreground">Presets</div> | 596 | <div className="text-sm font-medium text-foreground">Presets</div> |
| 589 | <div className="mt-3 grid gap-3 sm:grid-cols-2"> | 597 | <div className="mt-3 grid gap-3 sm:grid-cols-2"> |
| 590 | {mcpQuickPresets.map((preset) => { | 598 | {mcpQuickPresets.map((preset) => { |
| @@ -595,152 +603,145 @@ function McpSourceForm(props: { · 4 unmodified lines | |||
| 595 | : !isStdio && endpoint.trim() === (preset.input.endpoint ?? ""); | 603 | : !isStdio && endpoint.trim() === (preset.input.endpoint ?? ""); |
| 596 | 604 | ||
| 597 | return ( | 605 | return ( |
| 598 | <button | 606 | <Button |
| 599 | key={preset.id} | 607 | key={preset.id} |
| 600 | type="button" | 608 | type="button" |
| 609 | variant="outline" | ||
| 601 | onClick={() => applyPreset(preset)} | 610 | onClick={() => applyPreset(preset)} |
| 602 | className={ | 611 | className={cn( |
| 603 | selected | 612 | "h-auto flex-col items-start px-4 py-3 text-left", |
| 604 | ? "rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 text-left" | 613 | selected && "border-primary/30 bg-primary/5", |
| 605 | : "rounded-lg border border-border px-4 py-3 text-left transition-colors hover:bg-accent/40" | 614 | )} |
| 606 | } | ||
| 607 | > | 615 | > |
| 608 | <div className="flex items-center gap-2"> | 616 | <div className="flex items-center gap-2"> |
| 609 | {selected ? <IconCheck className="size-3.5 text-primary" /> : null} | 617 | {selected ? <IconCheck className="size-3.5 text-primary" /> : null} |
| 610 | <div className="text-sm font-medium text-foreground">{preset.name}</div> | 618 | <div className="text-sm font-medium text-foreground">{preset.name}</div> |
| 611 | </div> | 619 | </div> |
| 612 | <div className="mt-1 text-xs text-muted-foreground">{preset.summary}</div> | 620 | <div className="mt-1 text-xs text-muted-foreground">{preset.summary}</div> |
| 613 | </button> | 621 | </Button> |
| 614 | ); | 622 | ); |
| 615 | })} | 623 | })} |
| 616 | </div> | 624 | </div> |
| 617 | </div> | 625 | </Card> |
| 618 | )} | 626 | )} |
| 619 | 627 | ||
| 620 | {props.mode === "create" && ( | 628 | {props.mode === "create" && ( |
| 621 | <div className="rounded-xl border border-border p-6"> | 629 | <Card className="p-6"> |
| 622 | <div> | 630 | <div> |
| 623 | <div className="flex items-center justify-between gap-3"> | 631 | <div className="flex items-center justify-between gap-3"> |
| 624 | <div className="text-sm font-medium text-foreground">Discover</div> | 632 | <div className="text-sm font-medium text-foreground">Discover</div> |
| 625 | <button | 633 | <Button |
| 626 | type="button" | 634 | variant="ghost" |
| 627 | onClick={() => setShowProbeAuth((current) => !current)} | 635 | onClick={() => setShowProbeAuth((current) => !current)} |
| 628 | className="text-xs font-medium text-muted-foreground transition-colors hover:text-foreground" | 636 | className="text-xs font-medium text-muted-foreground transition-colors hover:text-foreground" |
| 629 | > | 637 | > |
| 630 | {showProbeAuth ? "Hide auth" : "Need auth?"} | 638 | {showProbeAuth ? "Hide auth" : "Need auth?"} |
| 631 | </button> | 639 | </Button> |
| 632 | </div> | 640 | </div> |
| 633 | 641 | ||
| 634 | <div className="mt-2 flex flex-col gap-3 sm:flex-row"> | 642 | <div className="mt-2 flex flex-col gap-3 sm:flex-row"> |
| 635 | <input | 643 | <Input |
| 636 | value={discoveryEndpoint} | 644 | value={discoveryEndpoint} |
| 637 | onChange={(event) => setDiscoveryEndpoint(event.target.value)} | 645 | onChange={(event) => setDiscoveryEndpoint(event.target.value)} |
| 638 | placeholder="https://mcp.example.com/mcp" | 646 | placeholder="https://mcp.example.com/mcp" |
| 639 | className="h-9 flex-1 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 647 | className="flex-1 font-mono text-xs" |
| 640 | /> | 648 | /> |
| 641 | <button | 649 | <Button |
| 642 | type="button" | 650 | variant="outline" |
| 643 | onClick={() => { | 651 | onClick={() => { |
| 644 | void handleDiscover(); | 652 | void handleDiscover(); |
| 645 | }} | 653 | }} |
| 646 | disabled={discoverMutation.status === "pending"} | 654 | disabled={discoverMutation.status === "pending"} |
| 647 | className="inline-flex h-9 items-center justify-center gap-2 rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50" | ||
| 648 | > | 655 | > |
| 649 | {discoverMutation.status === "pending" | 656 | {discoverMutation.status === "pending" |
| 650 | ? <IconSpinner className="size-3.5" /> | 657 | ? <IconSpinner className="size-3.5" /> |
| 651 | : <IconSearch className="size-3.5" />} | 658 | : <IconSearch className="size-3.5" />} |
| 652 | {discoverMutation.status === "pending" ? "Discovering..." : "Discover"} | 659 | {discoverMutation.status === "pending" ? "Discovering..." : "Discover"} |
| 653 | </button> | 660 | </Button> |
| 654 | </div> | 661 | </div> |
| 655 | 662 | ||
| 656 | {showProbeAuth && ( | 663 | {showProbeAuth && ( |
| 657 | <div className="mt-3 space-y-3 border-l-2 border-border pl-4"> | 664 | <div className="mt-3 space-y-3 rounded-lg border border-border bg-muted/20 p-4"> |
| 658 | <label className="grid gap-2"> | 665 | <div className="grid gap-2"> |
| 659 | <span className="text-xs font-medium text-foreground">Discovery auth</span> | 666 | <Label>Discovery auth</Label> |
| 660 | <select | 667 | <Select |
| 661 | value={probeAuth.kind} | 668 | value={probeAuth.kind} |
| 662 | onChange={(event) => | 669 | onChange={(event) => |
| 663 | setProbeAuth((current) => ({ | 670 | setProbeAuth((current) => ({ |
| 664 | ...current, | 671 | ...current, |
| 665 | kind: event.target.value as ProbeAuthState["kind"], | 672 | kind: event.target.value as ProbeAuthState["kind"], |
| 666 | }))} | 673 | }))} |
| 667 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 668 | > | 674 | > |
| 669 | <option value="none">None</option> | 675 | <option value="none">None</option> |
| 670 | <option value="bearer">Bearer</option> | 676 | <option value="bearer">Bearer</option> |
| 671 | <option value="basic">Basic</option> | 677 | <option value="basic">Basic</option> |
| 672 | <option value="headers">Custom headers</option> | 678 | <option value="headers">Custom headers</option> |
| 673 | </select> | 679 | </Select> |
| 674 | </label> | 680 | </div> |
| 675 | 681 | ||
| 676 | {probeAuth.kind === "bearer" && ( | 682 | {probeAuth.kind === "bearer" && ( |
| 677 | <div className="grid gap-4 md:grid-cols-2"> | 683 | <div className="grid gap-4 md:grid-cols-2"> |
| 678 | <label className="grid gap-2"> | 684 | <div className="grid gap-2"> |
| 679 | <span className="text-xs font-medium text-foreground">Header name</span> | 685 | <Label>Header name</Label> |
| 680 | <input | 686 | <Input |
| 681 | value={probeAuth.headerName} | 687 | value={probeAuth.headerName} |
| 682 | onChange={(event) => | 688 | onChange={(event) => |
| 683 | setProbeAuth((current) => ({ ...current, headerName: event.target.value }))} | 689 | setProbeAuth((current) => ({ ...current, headerName: event.target.value }))} |
| 684 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 685 | /> | 690 | /> |
| 686 | </label> | 691 | </div> |
| 687 | <label className="grid gap-2"> | 692 | <div className="grid gap-2"> |
| 688 | <span className="text-xs font-medium text-foreground">Prefix</span> | 693 | <Label>Prefix</Label> |
| 689 | <input | 694 | <Input |
| 690 | value={probeAuth.prefix} | 695 | value={probeAuth.prefix} |
| 691 | onChange={(event) => | 696 | onChange={(event) => |
| 692 | setProbeAuth((current) => ({ ...current, prefix: event.target.value }))} | 697 | setProbeAuth((current) => ({ ...current, prefix: event.target.value }))} |
| 693 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 694 | /> | 698 | /> |
| 695 | </label> | 699 | </div> |
| 696 | <label className="grid gap-2 md:col-span-2"> | 700 | <div className="grid gap-2 md:col-span-2"> |
| 697 | <span className="text-xs font-medium text-foreground">Token</span> | 701 | <Label>Token</Label> |
| 698 | <input | 702 | <Input |
| 699 | value={probeAuth.token} | 703 | value={probeAuth.token} |
| 700 | onChange={(event) => | 704 | onChange={(event) => |
| 701 | setProbeAuth((current) => ({ ...current, token: event.target.value }))} | 705 | setProbeAuth((current) => ({ ...current, token: event.target.value }))} |
| 702 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 706 | className="font-mono text-xs" |
| 703 | /> | 707 | /> |
| 704 | </label> | 708 | </div> |
| 705 | </div> | 709 | </div> |
| 706 | )} | 710 | )} |
| 707 | 711 | ||
| 708 | {probeAuth.kind === "basic" && ( | 712 | {probeAuth.kind === "basic" && ( |
| 709 | <div className="grid gap-4 md:grid-cols-2"> | 713 | <div className="grid gap-4 md:grid-cols-2"> |
| 710 | <label className="grid gap-2"> | 714 | <div className="grid gap-2"> |
| 711 | <span className="text-xs font-medium text-foreground">Username</span> | 715 | <Label>Username</Label> |
| 712 | <input | 716 | <Input |
| 713 | value={probeAuth.username} | 717 | value={probeAuth.username} |
| 714 | onChange={(event) => | 718 | onChange={(event) => |
| 715 | setProbeAuth((current) => ({ ...current, username: event.target.value }))} | 719 | setProbeAuth((current) => ({ ...current, username: event.target.value }))} |
| 716 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 717 | /> | 720 | /> |
| 718 | </label> | 721 | </div> |
| 719 | <label className="grid gap-2"> | 722 | <div className="grid gap-2"> |
| 720 | <span className="text-xs font-medium text-foreground">Password</span> | 723 | <Label>Password</Label> |
| 721 | <input | 724 | <Input |
| 722 | value={probeAuth.password} | 725 | value={probeAuth.password} |
| 723 | onChange={(event) => | 726 | onChange={(event) => |
| 724 | setProbeAuth((current) => ({ ...current, password: event.target.value }))} | 727 | setProbeAuth((current) => ({ ...current, password: event.target.value }))} |
| 725 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 726 | type="password" | 728 | type="password" |
| 727 | /> | 729 | /> |
| 728 | </label> | 730 | </div> |
| 729 | </div> | 731 | </div> |
| 730 | )} | 732 | )} |
| 731 | 733 | ||
| 732 | {probeAuth.kind === "headers" && ( | 734 | {probeAuth.kind === "headers" && ( |
| 733 | <label className="grid gap-2"> | 735 | <div className="grid gap-2"> |
| 734 | <span className="text-xs font-medium text-foreground">Headers JSON</span> | 736 | <Label>Headers JSON</Label> |
| 735 | <textarea | 737 | <Textarea |
| 736 | value={probeAuth.headersText} | 738 | value={probeAuth.headersText} |
| 737 | onChange={(event) => | 739 | onChange={(event) => |
| 738 | setProbeAuth((current) => ({ ...current, headersText: event.target.value }))} | 740 | setProbeAuth((current) => ({ ...current, headersText: event.target.value }))} |
| 739 | rows={3} | 741 | rows={3} |
| 740 | placeholder='{"x-api-key":"..."}' | 742 | placeholder='{"x-api-key":"..."}' |
| 741 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 742 | /> | 743 | /> |
| 743 | </label> | 744 | </div> |
| 744 | )} | 745 | )} |
| 745 | </div> | 746 | </div> |
| 746 | )} | 747 | )} |
| @@ -751,22 +752,21 @@ function McpSourceForm(props: { · 4 unmodified lines | |||
| 751 | </div> | 752 | </div> |
| 752 | )} | 753 | )} |
| 753 | </div> | 754 | </div> |
| 754 | </div> | 755 | </Card> |
| 755 | )} | 756 | )} |
| 756 | 757 | ||
| 757 | <div className="space-y-6 rounded-xl border border-border p-6"> | 758 | <Card className="space-y-6 p-6"> |
| 758 | <label className="grid gap-2"> | 759 | <div className="grid gap-2"> |
| 759 | <span className="text-xs font-medium text-foreground">Name</span> | 760 | <Label>Name</Label> |
| 760 | <input | 761 | <Input |
| 761 | value={name} | 762 | value={name} |
| 762 | onChange={(event) => setName(event.target.value)} | 763 | onChange={(event) => setName(event.target.value)} |
| 763 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 764 | /> | 764 | /> |
| 765 | </label> | 765 | </div> |
| 766 | 766 | ||
| 767 | <label className="grid gap-2"> | 767 | <div className="grid gap-2"> |
| 768 | <span className="text-xs font-medium text-foreground">Transport</span> | 768 | <Label>Transport</Label> |
| 769 | <select | 769 | <Select |
| 770 | value={transportFields.transport} | 770 | value={transportFields.transport} |
| 771 | onChange={(event) => { | 771 | onChange={(event) => { |
| 772 | const nextTransport = event.target.value as McpTransportValue; | 772 | const nextTransport = event.target.value as McpTransportValue; |
| @@ -779,34 +779,33 @@ function McpSourceForm(props: { · 6 unmodified lines | |||
| 779 | setOauthStatus("idle"); | 779 | setOauthStatus("idle"); |
| 780 | } | 780 | } |
| 781 | }} | 781 | }} |
| 782 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 783 | > | 782 | > |
| 784 | <option value="">Auto (remote)</option> | 783 | <option value="">Auto (remote)</option> |
| 785 | <option value="auto">Auto</option> | 784 | <option value="auto">Auto</option> |
| 786 | <option value="streamable-http">Streamable HTTP</option> | 785 | <option value="streamable-http">Streamable HTTP</option> |
| 787 | <option value="sse">SSE</option> | 786 | <option value="sse">SSE</option> |
| 788 | <option value="stdio">stdio</option> | 787 | <option value="stdio">stdio</option> |
| 789 | </select> | 788 | </Select> |
| 790 | </label> | 789 | </div> |
| 791 | 790 | ||
| 792 | {isStdio ? ( | 791 | {isStdio ? ( |
| 793 | <div className="grid gap-4 md:grid-cols-2"> | 792 | <div className="grid gap-4 md:grid-cols-2"> |
| 794 | <label className="grid gap-2 md:col-span-2"> | 793 | <div className="grid gap-2 md:col-span-2"> |
| 795 | <span className="text-xs font-medium text-foreground">Command</span> | 794 | <Label>Command</Label> |
| 796 | <input | 795 | <Input |
| 797 | value={transportFields.command} | 796 | value={transportFields.command} |
| 798 | onChange={(event) => | 797 | onChange={(event) => |
| 799 | setTransportFields({ | 798 | setTransportFields({ |
| 800 | ...transportFields, | 799 | ...transportFields, |
| 801 | command: event.target.value, | 800 | command: event.target.value, |
| 802 | })} | 801 | })} |
| 803 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 802 | className="font-mono text-xs" |
| 804 | /> | 803 | /> |
| 805 | </label> | 804 | </div> |
| 806 | 805 | ||
| 807 | <label className="grid gap-2"> | 806 | <div className="grid gap-2"> |
| 808 | <span className="text-xs font-medium text-foreground">Args</span> | 807 | <Label>Args</Label> |
| 809 | <textarea | 808 | <Textarea |
| 810 | value={transportFields.argsText} | 809 | value={transportFields.argsText} |
| 811 | onChange={(event) => | 810 | onChange={(event) => |
| 812 | setTransportFields({ | 811 | setTransportFields({ |
| @@ -815,13 +814,12 @@ function McpSourceForm(props: { · 2 unmodified lines | |||
| 815 | })} | 814 | })} |
| 816 | rows={3} | 815 | rows={3} |
| 817 | placeholder='["server.js","--port","8787"]' | 816 | placeholder='["server.js","--port","8787"]' |
| 818 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 819 | /> | 817 | /> |
| 820 | </label> | 818 | </div> |
| 821 | 819 | ||
| 822 | <label className="grid gap-2"> | 820 | <div className="grid gap-2"> |
| 823 | <span className="text-xs font-medium text-foreground">Environment</span> | 821 | <Label>Environment</Label> |
| 824 | <textarea | 822 | <Textarea |
| 825 | value={transportFields.envText} | 823 | value={transportFields.envText} |
| 826 | onChange={(event) => | 824 | onChange={(event) => |
| 827 | setTransportFields({ | 825 | setTransportFields({ |
| @@ -830,37 +828,36 @@ function McpSourceForm(props: { · 2 unmodified lines | |||
| 830 | })} | 828 | })} |
| 831 | rows={3} | 829 | rows={3} |
| 832 | placeholder='{"NODE_ENV":"production"}' | 830 | placeholder='{"NODE_ENV":"production"}' |
| 833 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 834 | /> | 831 | /> |
| 835 | </label> | 832 | </div> |
| 836 | 833 | ||
| 837 | <label className="grid gap-2 md:col-span-2"> | 834 | <div className="grid gap-2 md:col-span-2"> |
| 838 | <span className="text-xs font-medium text-foreground">Working Directory</span> | 835 | <Label>Working Directory</Label> |
| 839 | <input | 836 | <Input |
| 840 | value={transportFields.cwd} | 837 | value={transportFields.cwd} |
| 841 | onChange={(event) => | 838 | onChange={(event) => |
| 842 | setTransportFields({ | 839 | setTransportFields({ |
| 843 | ...transportFields, | 840 | ...transportFields, |
| 844 | cwd: event.target.value, | 841 | cwd: event.target.value, |
| 845 | })} | 842 | })} |
| 846 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 843 | className="font-mono text-xs" |
| 847 | /> | 844 | /> |
| 848 | </label> | 845 | </div> |
| 849 | </div> | 846 | </div> |
| 850 | ) : ( | 847 | ) : ( |
| 851 | <div className="grid gap-4 md:grid-cols-2"> | 848 | <div className="grid gap-4 md:grid-cols-2"> |
| 852 | <label className="grid gap-2 md:col-span-2"> | 849 | <div className="grid gap-2 md:col-span-2"> |
| 853 | <span className="text-xs font-medium text-foreground">Endpoint</span> | 850 | <Label>Endpoint</Label> |
| 854 | <input | 851 | <Input |
| 855 | value={endpoint} | 852 | value={endpoint} |
| 856 | onChange={(event) => setEndpoint(event.target.value)} | 853 | onChange={(event) => setEndpoint(event.target.value)} |
| 857 | className="h-9 rounded-lg border border-input bg-background px-3 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | 854 | className="font-mono text-xs" |
| 858 | /> | 855 | /> |
| 859 | </label> | 856 | </div> |
| 860 | 857 | ||
| 861 | <label className="grid gap-2"> | 858 | <div className="grid gap-2"> |
| 862 | <span className="text-xs font-medium text-foreground">Query Params</span> | 859 | <Label>Query Params</Label> |
| 863 | <textarea | 860 | <Textarea |
| 864 | value={transportFields.queryParamsText} | 861 | value={transportFields.queryParamsText} |
| 865 | onChange={(event) => | 862 | onChange={(event) => |
| 866 | setTransportFields({ | 863 | setTransportFields({ |
| @@ -869,13 +866,12 @@ function McpSourceForm(props: { · 2 unmodified lines | |||
| 869 | })} | 866 | })} |
| 870 | rows={3} | 867 | rows={3} |
| 871 | placeholder='{"transport":"streamable-http"}' | 868 | placeholder='{"transport":"streamable-http"}' |
| 872 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 873 | /> | 869 | /> |
| 874 | </label> | 870 | </div> |
| 875 | 871 | ||
| 876 | <label className="grid gap-2"> | 872 | <div className="grid gap-2"> |
| 877 | <span className="text-xs font-medium text-foreground">Headers</span> | 873 | <Label>Headers</Label> |
| 878 | <textarea | 874 | <Textarea |
| 879 | value={transportFields.headersText} | 875 | value={transportFields.headersText} |
| 880 | onChange={(event) => | 876 | onChange={(event) => |
| 881 | setTransportFields({ | 877 | setTransportFields({ |
| @@ -884,16 +880,15 @@ function McpSourceForm(props: { · 2 unmodified lines | |||
| 884 | })} | 880 | })} |
| 885 | rows={3} | 881 | rows={3} |
| 886 | placeholder='{"x-api-key":"..."}' | 882 | placeholder='{"x-api-key":"..."}' |
| 887 | className="rounded-lg border border-input bg-background px-3 py-2 font-mono text-xs outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 888 | /> | 883 | /> |
| 889 | </label> | 884 | </div> |
| 890 | </div> | 885 | </div> |
| 891 | )} | 886 | )} |
| 892 | 887 | ||
| 893 | {!isStdio && ( | 888 | {!isStdio && ( |
| 894 | <label className="grid gap-2"> | 889 | <div className="grid gap-2"> |
| 895 | <span className="text-xs font-medium text-foreground">Auth</span> | 890 | <Label>Auth</Label> |
| 896 | <select | 891 | <Select |
| 897 | value={authKind} | 892 | value={authKind} |
| 898 | onChange={(event) => { | 893 | onChange={(event) => { |
| 899 | const nextKind = event.target.value as McpConnectionAuth["kind"]; | 894 | const nextKind = event.target.value as McpConnectionAuth["kind"]; |
| @@ -903,16 +898,15 @@ function McpSourceForm(props: { · 3 unmodified lines | |||
| 903 | setOauthStatus("idle"); | 898 | setOauthStatus("idle"); |
| 904 | } | 899 | } |
| 905 | }} | 900 | }} |
| 906 | className="h-9 rounded-lg border border-input bg-background px-3 text-sm outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 907 | > | 901 | > |
| 908 | <option value="none">None</option> | 902 | <option value="none">None</option> |
| 909 | <option value="oauth2">OAuth 2.0</option> | 903 | <option value="oauth2">OAuth 2.0</option> |
| 910 | </select> | 904 | </Select> |
| 911 | </label> | 905 | </div> |
| 912 | )} | 906 | )} |
| 913 | 907 | ||
| 914 | {!isStdio && authKind === "oauth2" && ( | 908 | {!isStdio && authKind === "oauth2" && ( |
| 915 | <div className="border-l-2 border-border pl-4"> | 909 | <div className="rounded-lg border border-border bg-muted/20 p-4"> |
| 916 | <div className="flex flex-wrap items-center justify-between gap-3"> | 910 | <div className="flex flex-wrap items-center justify-between gap-3"> |
| 917 | <div> | 911 | <div> |
| 918 | <div className="text-sm font-medium text-foreground">OAuth</div> | 912 | <div className="text-sm font-medium text-foreground">OAuth</div> |
| @@ -920,8 +914,8 @@ function McpSourceForm(props: { · 1 unmodified line | |||
| 920 | Authenticate with the MCP server's built-in OAuth flow. | 914 | Authenticate with the MCP server's built-in OAuth flow. |
| 921 | </div> | 915 | </div> |
| 922 | </div> | 916 | </div> |
| 923 | <button | 917 | <Button |
| 924 | type="button" | 918 | variant="outline" |
| 925 | onClick={() => { | 919 | onClick={() => { |
| 926 | setError(null); | 920 | setError(null); |
| 927 | setOauthStatus("pending"); | 921 | setOauthStatus("pending"); |
| @@ -933,10 +927,9 @@ function McpSourceForm(props: { · 5 unmodified lines | |||
| 933 | ); | 927 | ); |
| 934 | }); | 928 | }); |
| 935 | }} | 929 | }} |
| 936 | className="inline-flex h-9 items-center rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 937 | > | 930 | > |
| 938 | {oauthStatus === "connected" ? "Reconnect OAuth" : "Connect OAuth"} | 931 | {oauthStatus === "connected" ? "Reconnect OAuth" : "Connect OAuth"} |
| 939 | </button> | 932 | </Button> |
| 940 | </div> | 933 | </div> |
| 941 | {oauthStatus === "connected" && ( | 934 | {oauthStatus === "connected" && ( |
| 942 | <div className="mt-3 text-xs text-primary"> | 935 | <div className="mt-3 text-xs text-primary"> |
| @@ -947,14 +940,13 @@ function McpSourceForm(props: { · 4 unmodified lines | |||
| 947 | )} | 940 | )} |
| 948 | 941 | ||
| 949 | {error && ( | 942 | {error && ( |
| 950 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-3 text-sm text-destructive"> | 943 | <Alert variant="destructive"> |
| 951 | {error} | 944 | {error} |
| 952 | </div> | 945 | </Alert> |
| 953 | )} | 946 | )} |
| 954 | 947 | ||
| 955 | <div className="flex items-center justify-end gap-3"> | 948 | <div className="flex items-center justify-end gap-3"> |
| 956 | <button | 949 | <Button |
| 957 | type="button" | ||
| 958 | onClick={() => { | 950 | onClick={() => { |
| 959 | setError(null); | 951 | setError(null); |
| 960 | void submitMutation | 952 | void submitMutation |
| @@ -964,7 +956,6 @@ function McpSourceForm(props: { · 3 unmodified lines | |||
| 964 | ); | 956 | ); |
| 965 | }} | 957 | }} |
| 966 | disabled={submitMutation.status === "pending"} | 958 | disabled={submitMutation.status === "pending"} |
| 967 | className="inline-flex h-9 items-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50" | ||
| 968 | > | 959 | > |
| 969 | {submitMutation.status === "pending" | 960 | {submitMutation.status === "pending" |
| 970 | ? props.mode === "create" | 961 | ? props.mode === "create" |
| @@ -973,9 +964,9 @@ function McpSourceForm(props: { · 2 unmodified lines | |||
| 973 | : props.mode === "create" | 964 | : props.mode === "create" |
| 974 | ? "Create Source" | 965 | ? "Create Source" |
| 975 | : "Save Changes"} | 966 | : "Save Changes"} |
| 976 | </button> | 967 | </Button> |
| 977 | </div> | ||
| 978 | </div> | 968 | </div> |
| 969 | </Card> | ||
| 979 | </div> | 970 | </div> |
| 980 | ); | 971 | ); |
| 981 | } | 972 | } |
| @@ -1052,9 +1043,9 @@ export function McpEditPage(props: { · 70 unmodified lines | |||
| 1052 | 1043 | ||
| 1053 | if (Result.isFailure(configResult)) { | 1044 | if (Result.isFailure(configResult)) { |
| 1054 | return ( | 1045 | return ( |
| 1055 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-3 text-sm text-destructive"> | 1046 | <Alert variant="destructive"> |
| 1056 | Failed loading source configuration. | 1047 | Failed loading source configuration. |
| 1057 | </div> | 1048 | </Alert> |
| 1058 | ); | 1049 | ); |
| 1059 | } | 1050 | } |
| 1060 | 1051 | ||
| @@ -1185,48 +1176,44 @@ export function McpDetailPage(props: { · 124 unmodified lines | |||
| 1185 | summary={summary} | 1176 | summary={summary} |
| 1186 | actions={( | 1177 | actions={( |
| 1187 | <> | 1178 | <> |
| 1188 | <button | 1179 | <Button |
| 1189 | type="button" | 1180 | variant="outline" |
| 1190 | onClick={() => | 1181 | onClick={() => |
| 1191 | void navigation.edit(props.source.id)} | 1182 | void navigation.edit(props.source.id)} |
| 1192 | className="inline-flex h-9 items-center gap-1.5 rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50" | ||
| 1193 | > | 1183 | > |
| 1194 | <IconPencil className="size-3.5" /> | 1184 | <IconPencil className="size-3.5" /> |
| 1195 | Edit | 1185 | Edit |
| 1196 | </button> | 1186 | </Button> |
| 1197 | {confirmDelete ? ( | 1187 | {confirmDelete ? ( |
| 1198 | <div className="flex items-center gap-2"> | 1188 | <div className="flex items-center gap-2"> |
| 1199 | <span className="text-xs font-medium text-destructive"> | 1189 | <span className="text-xs font-medium text-destructive"> |
| 1200 | Confirm delete? | 1190 | Confirm delete? |
| 1201 | </span> | 1191 | </span> |
| 1202 | <button | 1192 | <Button |
| 1203 | type="button" | 1193 | variant="outline" |
| 1204 | onClick={() => setConfirmDelete(false)} | 1194 | onClick={() => setConfirmDelete(false)} |
| 1205 | disabled={isDeleting} | 1195 | disabled={isDeleting} |
| 1206 | className="inline-flex h-9 items-center rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50" | ||
| 1207 | > | 1196 | > |
| 1208 | Cancel | 1197 | Cancel |
| 1209 | </button> | 1198 | </Button> |
| 1210 | <button | 1199 | <Button |
| 1211 | type="button" | 1200 | variant="destructive-outline" |
| 1212 | onClick={() => { | 1201 | onClick={() => { |
| 1213 | void handleDelete().catch(() => {}); | 1202 | void handleDelete().catch(() => {}); |
| 1214 | }} | 1203 | }} |
| 1215 | disabled={isDeleting} | 1204 | disabled={isDeleting} |
| 1216 | className="inline-flex h-9 items-center rounded-lg border border-destructive/25 bg-destructive/5 px-3 text-sm font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 1217 | > | 1205 | > |
| 1218 | {isDeleting ? "Deleting..." : "Delete"} | 1206 | {isDeleting ? "Deleting..." : "Delete"} |
| 1219 | </button> | 1207 | </Button> |
| 1220 | </div> | 1208 | </div> |
| 1221 | ) : ( | 1209 | ) : ( |
| 1222 | <button | 1210 | <Button |
| 1223 | type="button" | 1211 | variant="destructive-outline" |
| 1224 | onClick={() => setConfirmDelete(true)} | 1212 | onClick={() => setConfirmDelete(true)} |
| 1225 | disabled={isDeleting} | 1213 | disabled={isDeleting} |
| 1226 | className="inline-flex h-9 items-center rounded-lg border border-destructive/25 bg-destructive/5 px-3 text-sm font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 1227 | > | 1214 | > |
| 1228 | Delete | 1215 | Delete |
| 1229 | </button> | 1216 | </Button> |
| 1230 | )} | 1217 | )} |
| 1231 | </> | 1218 | </> |
| 1232 | )} | 1219 | )} |
| @@ -1,4 +1,4 @@ | |||
| 1 | import { useEffect, useState, type ReactNode } from "react"; | 1 | import { useEffect, useState } from "react"; |
| 2 | 2 | ||
| 3 | import { | 3 | import { |
| 4 | getExecutorApiBaseUrl, | 4 | getExecutorApiBaseUrl, |
| @@ -8,6 +8,13 @@ import { · 3 unmodified lines | |||
| 8 | import type { | 8 | import type { |
| 9 | SecretStoreCreateFormProps, | 9 | SecretStoreCreateFormProps, |
| 10 | } from "@executor/react/plugins"; | 10 | } from "@executor/react/plugins"; |
| 11 | import { | ||
| 12 | Alert, | ||
| 13 | Button, | ||
| 14 | Input, | ||
| 15 | Label, | ||
| 16 | Select, | ||
| 17 | } from "@executor/react/plugins"; | ||
| 11 | import { | 18 | import { |
| 12 | type OnePasswordDiscoverVaultsInput, | 19 | type OnePasswordDiscoverVaultsInput, |
| 13 | type OnePasswordDiscoverVaultsResult, | 20 | type OnePasswordDiscoverVaultsResult, |
| @@ -15,26 +22,6 @@ import { · 1 unmodified line | |||
| 15 | type OnePasswordVault, | 22 | type OnePasswordVault, |
| 16 | } from "@executor/plugin-onepassword-shared"; | 23 | } from "@executor/plugin-onepassword-shared"; |
| 17 | 24 | ||
| 18 | const fieldClassName = | ||
| 19 | "h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25"; | ||
| 20 | |||
| 21 | const buttonClassName = | ||
| 22 | "inline-flex h-9 items-center justify-center rounded-lg border border-input bg-card px-3 text-[13px] font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50"; | ||
| 23 | |||
| 24 | const primaryButtonClassName = | ||
| 25 | "inline-flex h-9 items-center justify-center rounded-lg bg-primary px-3 text-[13px] font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50"; | ||
| 26 | |||
| 27 | function FieldLabel(props: { | ||
| 28 | label: string; | ||
| 29 | children: ReactNode; | ||
| 30 | }) { | ||
| 31 | return ( | ||
| 32 | <label className="grid gap-2"> | ||
| 33 | <span className="text-[12px] font-medium text-foreground">{props.label}</span> | ||
| 34 | {props.children} | ||
| 35 | </label> | ||
| 36 | ); | ||
| 37 | } | ||
| 38 | 25 | ||
| 39 | export function OnePasswordSecretStoreCreateForm( | 26 | export function OnePasswordSecretStoreCreateForm( |
| 40 | props: SecretStoreCreateFormProps, | 27 | props: SecretStoreCreateFormProps, |
| @@ -189,66 +176,66 @@ export function OnePasswordSecretStoreCreateForm( · 148 unmodified lines | |||
| 189 | return ( | 176 | return ( |
| 190 | <div className="space-y-4"> | 177 | <div className="space-y-4"> |
| 191 | {error && ( | 178 | {error && ( |
| 192 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-[13px] text-destructive"> | 179 | <Alert variant="destructive"> |
| 193 | {error} | 180 | {error} |
| 194 | </div> | 181 | </Alert> |
| 195 | )} | 182 | )} |
| 196 | 183 | ||
| 197 | <FieldLabel label="Name"> | 184 | <div className="grid gap-2"> |
| 198 | <input | 185 | <Label>Name</Label> |
| 186 | <Input | ||
| 199 | value={name} | 187 | value={name} |
| 200 | onChange={(event) => setName(event.target.value)} | 188 | onChange={(event) => setName(event.target.value)} |
| 201 | placeholder="Team 1Password" | 189 | placeholder="Team 1Password" |
| 202 | className={fieldClassName} | ||
| 203 | autoFocus | 190 | autoFocus |
| 204 | /> | 191 | /> |
| 205 | </FieldLabel> | 192 | </div> |
| 206 | 193 | ||
| 207 | <div className="grid gap-4 sm:grid-cols-2"> | 194 | <div className="grid gap-4 sm:grid-cols-2"> |
| 208 | <FieldLabel label="Auth method"> | 195 | <div className="grid gap-2"> |
| 209 | <select | 196 | <Label>Auth method</Label> |
| 197 | <Select | ||
| 210 | value={authKind} | 198 | value={authKind} |
| 211 | onChange={(event) => | 199 | onChange={(event) => |
| 212 | setAuthKind(event.target.value as "desktop-app" | "service-account")} | 200 | setAuthKind(event.target.value as "desktop-app" | "service-account")} |
| 213 | className={fieldClassName} | ||
| 214 | > | 201 | > |
| 215 | <option value="desktop-app">Desktop app</option> | 202 | <option value="desktop-app">Desktop app</option> |
| 216 | <option value="service-account">Service account</option> | 203 | <option value="service-account">Service account</option> |
| 217 | </select> | 204 | </Select> |
| 218 | </FieldLabel> | 205 | </div> |
| 219 | <div className="flex items-end"> | 206 | <div className="flex items-end"> |
| 220 | <button | 207 | <Button |
| 208 | variant="outline" | ||
| 221 | type="button" | 209 | type="button" |
| 222 | onClick={() => { | 210 | onClick={() => { |
| 223 | void handleDiscoverVaults(); | 211 | void handleDiscoverVaults(); |
| 224 | }} | 212 | }} |
| 225 | disabled={discoverVaultsMutation.status === "pending"} | 213 | disabled={discoverVaultsMutation.status === "pending"} |
| 226 | className={buttonClassName} | ||
| 227 | > | 214 | > |
| 228 | {discoverVaultsMutation.status === "pending" ? "Loading..." : "Load vaults"} | 215 | {discoverVaultsMutation.status === "pending" ? "Loading..." : "Load vaults"} |
| 229 | </button> | 216 | </Button> |
| 230 | </div> | 217 | </div> |
| 231 | </div> | 218 | </div> |
| 232 | 219 | ||
| 233 | {authKind === "desktop-app" ? ( | 220 | {authKind === "desktop-app" ? ( |
| 234 | <FieldLabel label="Account name or UUID"> | 221 | <div className="grid gap-2"> |
| 235 | <input | 222 | <Label>Account name or UUID</Label> |
| 223 | <Input | ||
| 236 | value={accountName} | 224 | value={accountName} |
| 237 | onChange={(event) => setAccountName(event.target.value)} | 225 | onChange={(event) => setAccountName(event.target.value)} |
| 238 | placeholder="my.1password.com" | 226 | placeholder="my.1password.com" |
| 239 | className={fieldClassName} | ||
| 240 | /> | 227 | /> |
| 241 | <div className="text-[11px] text-muted-foreground"> | 228 | <div className="text-[11px] text-muted-foreground"> |
| 242 | Use the account shown in the 1Password desktop app sidebar or the | 229 | Use the account shown in the 1Password desktop app sidebar or the |
| 243 | account UUID from <code>op account list --format json</code>. | 230 | account UUID from <code>op account list --format json</code>. |
| 244 | </div> | 231 | </div> |
| 245 | </FieldLabel> | 232 | </div> |
| 246 | ) : ( | 233 | ) : ( |
| 247 | <FieldLabel label="Service Account Token Secret"> | 234 | <div className="grid gap-2"> |
| 248 | <select | 235 | <Label>Service Account Token Secret</Label> |
| 236 | <Select | ||
| 249 | value={tokenSecretId} | 237 | value={tokenSecretId} |
| 250 | onChange={(event) => setTokenSecretId(event.target.value)} | 238 | onChange={(event) => setTokenSecretId(event.target.value)} |
| 251 | className={fieldClassName} | ||
| 252 | > | 239 | > |
| 253 | <option value=""> | 240 | <option value=""> |
| 254 | {props.secrets.status === "ready" | 241 | {props.secrets.status === "ready" |
| @@ -261,60 +248,60 @@ export function OnePasswordSecretStoreCreateForm( · 6 unmodified lines | |||
| 261 | {secret.name ?? secret.id} | 248 | {secret.name ?? secret.id} |
| 262 | </option> | 249 | </option> |
| 263 | ))} | 250 | ))} |
| 264 | </select> | 251 | </Select> |
| 265 | <div className="text-[11px] text-muted-foreground"> | 252 | <div className="text-[11px] text-muted-foreground"> |
| 266 | Use this for remote or headless automation. Desktop app auth is better for | 253 | Use this for remote or headless automation. Desktop app auth is better for |
| 267 | local Executor use. | 254 | local Executor use. |
| 268 | </div> | 255 | </div> |
| 269 | </FieldLabel> | 256 | </div> |
| 270 | )} | 257 | )} |
| 271 | 258 | ||
| 272 | {discoveredVaults.length > 0 && ( | 259 | {discoveredVaults.length > 0 && ( |
| 273 | <FieldLabel label="Discovered vaults"> | 260 | <div className="grid gap-2"> |
| 274 | <select | 261 | <Label>Discovered vaults</Label> |
| 262 | <Select | ||
| 275 | value={vaultId} | 263 | value={vaultId} |
| 276 | onChange={(event) => setVaultId(event.target.value)} | 264 | onChange={(event) => setVaultId(event.target.value)} |
| 277 | className={fieldClassName} | ||
| 278 | > | 265 | > |
| 279 | {discoveredVaults.map((vault) => ( | 266 | {discoveredVaults.map((vault) => ( |
| 280 | <option key={vault.id} value={vault.id}> | 267 | <option key={vault.id} value={vault.id}> |
| 281 | {vault.name} | 268 | {vault.name} |
| 282 | </option> | 269 | </option> |
| 283 | ))} | 270 | ))} |
| 284 | </select> | 271 | </Select> |
| 285 | <div className="text-[11px] text-muted-foreground"> | 272 | <div className="text-[11px] text-muted-foreground"> |
| 286 | Pick from the vaults visible to this account, or override the id below. | 273 | Pick from the vaults visible to this account, or override the id below. |
| 287 | </div> | 274 | </div> |
| 288 | </FieldLabel> | 275 | </div> |
| 289 | )} | 276 | )} |
| 290 | 277 | ||
| 291 | <FieldLabel label="Vault ID"> | 278 | <div className="grid gap-2"> |
| 292 | <input | 279 | <Label>Vault ID</Label> |
| 280 | <Input | ||
| 293 | value={vaultId} | 281 | value={vaultId} |
| 294 | onChange={(event) => setVaultId(event.target.value)} | 282 | onChange={(event) => setVaultId(event.target.value)} |
| 295 | placeholder="vlt_..." | 283 | placeholder="vlt_..." |
| 296 | className={`${fieldClassName} font-mono text-[12px]`} | 284 | className="font-mono text-[12px]" |
| 297 | /> | 285 | /> |
| 298 | </FieldLabel> | 286 | </div> |
| 299 | 287 | ||
| 300 | <div className="flex justify-end gap-2"> | 288 | <div className="flex justify-end gap-2"> |
| 301 | <button | 289 | <Button |
| 290 | variant="outline" | ||
| 302 | type="button" | 291 | type="button" |
| 303 | onClick={props.onCancel} | 292 | onClick={props.onCancel} |
| 304 | className={buttonClassName} | ||
| 305 | > | 293 | > |
| 306 | Cancel | 294 | Cancel |
| 307 | </button> | 295 | </Button> |
| 308 | <button | 296 | <Button |
| 309 | type="button" | 297 | type="button" |
| 310 | onClick={() => { | 298 | onClick={() => { |
| 311 | void handleSubmit(); | 299 | void handleSubmit(); |
| 312 | }} | 300 | }} |
| 313 | disabled={props.isSubmitting} | 301 | disabled={props.isSubmitting} |
| 314 | className={primaryButtonClassName} | ||
| 315 | > | 302 | > |
| 316 | {props.isSubmitting ? "Creating..." : "Create store"} | 303 | {props.isSubmitting ? "Creating..." : "Create store"} |
| 317 | </button> | 304 | </Button> |
| 318 | </div> | 305 | </div> |
| 319 | </div> | 306 | </div> |
| 320 | ); | 307 | ); |
| @@ -13,8 +13,14 @@ import { · 12 unmodified lines | |||
| 13 | useWorkspaceRequestContext, | 13 | useWorkspaceRequestContext, |
| 14 | } from "@executor/react"; | 14 | } from "@executor/react"; |
| 15 | import { | 15 | import { |
| 16 | Alert, | ||
| 17 | Button, | ||
| 18 | Card, | ||
| 16 | DocumentPanel, | 19 | DocumentPanel, |
| 17 | IconPencil, | 20 | IconPencil, |
| 21 | Input, | ||
| 22 | Label, | ||
| 23 | Select, | ||
| 18 | SourceToolDetailPanel, | 24 | SourceToolDetailPanel, |
| 19 | SourceToolExplorer, | 25 | SourceToolExplorer, |
| 20 | parseSourceToolExplorerSearch, | 26 | parseSourceToolExplorerSearch, |
| @@ -381,63 +387,61 @@ function OpenApiSourceForm(props: { · 360 unmodified lines | |||
| 381 | }; | 387 | }; |
| 382 | 388 | ||
| 383 | return ( | 389 | return ( |
| 384 | <div className="space-y-6 rounded-xl border border-border p-6"> | 390 | <Card className="space-y-6 p-6"> |
| 385 | <Section title="Connection"> | 391 | <Section title="Connection"> |
| 386 | <div className="grid gap-4"> | 392 | <div className="grid gap-4"> |
| 387 | <label className="grid gap-2"> | 393 | <div className="grid gap-2"> |
| 388 | <span className="text-xs font-medium text-foreground">Name</span> | 394 | <Label>Name</Label> |
| 389 | <input | 395 | <Input |
| 390 | value={name} | 396 | value={name} |
| 391 | onChange={(event) => { | 397 | onChange={(event) => { |
| 392 | setNameEdited(true); | 398 | setNameEdited(true); |
| 393 | setName(event.target.value); | 399 | setName(event.target.value); |
| 394 | }} | 400 | }} |
| 395 | placeholder="GitHub REST" | 401 | placeholder="GitHub REST" |
| 396 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 397 | /> | 402 | /> |
| 398 | </label> | 403 | </div> |
| 399 | 404 | ||
| 400 | <label className="grid gap-2"> | 405 | <div className="grid gap-2"> |
| 401 | <span className="text-xs font-medium text-foreground">Spec URL</span> | 406 | <Label>Spec URL</Label> |
| 402 | <input | 407 | <Input |
| 403 | value={specUrl} | 408 | value={specUrl} |
| 404 | onChange={(event) => setSpecUrl(event.target.value)} | 409 | onChange={(event) => setSpecUrl(event.target.value)} |
| 405 | onBlur={() => { | 410 | onBlur={() => { |
| 406 | void runPreview({ mode: "manual" }); | 411 | void runPreview({ mode: "manual" }); |
| 407 | }} | 412 | }} |
| 408 | placeholder="https://example.com/openapi.json" | 413 | placeholder="https://example.com/openapi.json" |
| 409 | className="h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-xs text-foreground outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/25" | 414 | className="font-mono text-xs" |
| 410 | /> | 415 | /> |
| 411 | </label> | 416 | </div> |
| 412 | 417 | ||
| 413 | <label className="grid gap-2"> | 418 | <div className="grid gap-2"> |
| 414 | <span className="text-xs font-medium text-foreground">Base URL</span> | 419 | <Label>Base URL</Label> |
| 415 | <input | 420 | <Input |
| 416 | value={baseUrl} | 421 | value={baseUrl} |
| 417 | onChange={(event) => { | 422 | onChange={(event) => { |
| 418 | setBaseUrlEdited(true); | 423 | setBaseUrlEdited(true); |
| 419 | setBaseUrl(event.target.value); | 424 | setBaseUrl(event.target.value); |
| 420 | }} | 425 | }} |
| 421 | placeholder="https://api.example.com" | 426 | placeholder="https://api.example.com" |
| 422 | className="h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-xs text-foreground outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/25" | 427 | className="font-mono text-xs" |
| 423 | /> | 428 | /> |
| 424 | </label> | 429 | </div> |
| 425 | 430 | ||
| 426 | <label className="grid gap-2"> | 431 | <div className="grid gap-2"> |
| 427 | <span className="text-xs font-medium text-foreground">Auth</span> | 432 | <Label>Auth</Label> |
| 428 | <select | 433 | <Select |
| 429 | value={authKind} | 434 | value={authKind} |
| 430 | onChange={(event) => | 435 | onChange={(event) => |
| 431 | setAuthKind(event.target.value as OpenApiConnectInput["auth"]["kind"])} | 436 | setAuthKind(event.target.value as OpenApiConnectInput["auth"]["kind"])} |
| 432 | className="h-9 w-full rounded-lg border border-input bg-background px-3 text-sm text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25" | ||
| 433 | > | 437 | > |
| 434 | <option value="none">None</option> | 438 | <option value="none">None</option> |
| 435 | <option value="bearer">Bearer Secret</option> | 439 | <option value="bearer">Bearer Secret</option> |
| 436 | </select> | 440 | </Select> |
| 437 | </label> | 441 | </div> |
| 438 | 442 | ||
| 439 | {authKind === "bearer" && ( | 443 | {authKind === "bearer" && ( |
| 440 | <div className="space-y-4 border-l-2 border-border pl-4"> | 444 | <div className="space-y-4 rounded-lg border border-border bg-muted/20 p-4"> |
| 441 | <SecretReferenceField | 445 | <SecretReferenceField |
| 442 | label="Secret" | 446 | label="Secret" |
| 443 | value={tokenSecretRef} | 447 | value={tokenSecretRef} |
| @@ -448,25 +452,25 @@ function OpenApiSourceForm(props: { · 4 unmodified lines | |||
| 448 | /> | 452 | /> |
| 449 | 453 | ||
| 450 | <div className="grid gap-4 sm:grid-cols-2"> | 454 | <div className="grid gap-4 sm:grid-cols-2"> |
| 451 | <label className="grid gap-2"> | 455 | <div className="grid gap-2"> |
| 452 | <span className="text-xs font-medium text-foreground">Header Name</span> | 456 | <Label>Header Name</Label> |
| 453 | <input | 457 | <Input |
| 454 | value={authHeaderName} | 458 | value={authHeaderName} |
| 455 | onChange={(event) => setAuthHeaderName(event.target.value)} | 459 | onChange={(event) => setAuthHeaderName(event.target.value)} |
| 456 | placeholder={DEFAULT_BEARER_HEADER_NAME} | 460 | placeholder={DEFAULT_BEARER_HEADER_NAME} |
| 457 | className="h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-xs text-foreground outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/25" | 461 | className="font-mono text-xs" |
| 458 | /> | 462 | /> |
| 459 | </label> | 463 | </div> |
| 460 | 464 | ||
| 461 | <label className="grid gap-2"> | 465 | <div className="grid gap-2"> |
| 462 | <span className="text-xs font-medium text-foreground">Prefix</span> | 466 | <Label>Prefix</Label> |
| 463 | <input | 467 | <Input |
| 464 | value={authPrefix} | 468 | value={authPrefix} |
| 465 | onChange={(event) => setAuthPrefix(event.target.value)} | 469 | onChange={(event) => setAuthPrefix(event.target.value)} |
| 466 | placeholder={DEFAULT_BEARER_PREFIX} | 470 | placeholder={DEFAULT_BEARER_PREFIX} |
| 467 | className="h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-xs text-foreground outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/25" | 471 | className="font-mono text-xs" |
| 468 | /> | 472 | /> |
| 469 | </label> | 473 | </div> |
| 470 | </div> | 474 | </div> |
| 471 | </div> | 475 | </div> |
| 472 | )} | 476 | )} |
| @@ -475,16 +479,16 @@ function OpenApiSourceForm(props: { · 2 unmodified lines | |||
| 475 | 479 | ||
| 476 | <Section title="Preview"> | 480 | <Section title="Preview"> |
| 477 | <div className="flex items-center gap-3"> | 481 | <div className="flex items-center gap-3"> |
| 478 | <button | 482 | <Button |
| 483 | variant="outline" | ||
| 479 | type="button" | 484 | type="button" |
| 480 | onClick={() => { | 485 | onClick={() => { |
| 481 | void runPreview({ mode: "manual" }); | 486 | void runPreview({ mode: "manual" }); |
| 482 | }} | 487 | }} |
| 483 | disabled={previewMutation.status === "pending" || submitMutation.status === "pending"} | 488 | disabled={previewMutation.status === "pending" || submitMutation.status === "pending"} |
| 484 | className="inline-flex h-9 items-center justify-center rounded-lg border border-input bg-card px-3 text-sm font-medium text-foreground transition-colors hover:bg-accent/50 disabled:pointer-events-none disabled:opacity-50" | ||
| 485 | > | 489 | > |
| 486 | {previewMutation.status === "pending" ? "Previewing..." : "Preview Spec"} | 490 | {previewMutation.status === "pending" ? "Previewing..." : "Preview Spec"} |
| 487 | </button> | 491 | </Button> |
| 488 | {preview && ( | 492 | {preview && ( |
| 489 | <div className="text-xs text-muted-foreground"> | 493 | <div className="text-xs text-muted-foreground"> |
| 490 | {preview.operationCount} operations | 494 | {preview.operationCount} operations |
| @@ -519,33 +523,32 @@ function OpenApiSourceForm(props: { · 28 unmodified lines | |||
| 519 | )} | 523 | )} |
| 520 | </dl> | 524 | </dl> |
| 521 | {preview.warnings.length > 0 && ( | 525 | {preview.warnings.length > 0 && ( |
| 522 | <div className="mt-3 rounded-md border border-amber-300/40 bg-amber-100/20 px-3 py-2 text-xs text-amber-800"> | 526 | <Alert variant="warning" className="mt-3 text-xs"> |
| 523 | {preview.warnings.join(" ")} | 527 | {preview.warnings.join(" ")} |
| 524 | </div> | 528 | </Alert> |
| 525 | )} | 529 | )} |
| 526 | </div> | 530 | </div> |
| 527 | )} | 531 | )} |
| 528 | </Section> | 532 | </Section> |
| 529 | 533 | ||
| 530 | {error && ( | 534 | {error && ( |
| 531 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-sm text-destructive"> | 535 | <Alert variant="destructive"> |
| 532 | {error} | 536 | {error} |
| 533 | </div> | 537 | </Alert> |
| 534 | )} | 538 | )} |
| 535 | 539 | ||
| 536 | <div className="flex items-center justify-end"> | 540 | <div className="flex items-center justify-end"> |
| 537 | <button | 541 | <Button |
| 538 | type="button" | 542 | type="button" |
| 539 | onClick={() => { | 543 | onClick={() => { |
| 540 | void handleSubmit(); | 544 | void handleSubmit(); |
| 541 | }} | 545 | }} |
| 542 | disabled={submitMutation.status === "pending"} | 546 | disabled={submitMutation.status === "pending"} |
| 543 | className="inline-flex h-9 items-center justify-center rounded-lg bg-primary px-4 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50" | ||
| 544 | > | 547 | > |
| 545 | {submitMutation.status === "pending" ? props.busyLabel : props.submitLabel} | 548 | {submitMutation.status === "pending" ? props.busyLabel : props.submitLabel} |
| 546 | </button> | 549 | </Button> |
| 547 | </div> | 550 | </div> |
| 548 | </div> | 551 | </Card> |
| 549 | ); | 552 | ); |
| 550 | } | 553 | } |
| 551 | 554 | ||
| @@ -641,9 +644,9 @@ function OpenApiEditSourcePageReady(props: { · 89 unmodified lines | |||
| 641 | if (Result.isFailure(configResult)) { | 644 | if (Result.isFailure(configResult)) { |
| 642 | return ( | 645 | return ( |
| 643 | <Section title="Edit Source"> | 646 | <Section title="Edit Source"> |
| 644 | <div className="rounded-lg border border-destructive/30 bg-destructive/8 p-4 text-sm text-destructive"> | 647 | <Alert variant="destructive"> |
| 645 | Failed loading source configuration. | 648 | Failed loading source configuration. |
| 646 | </div> | 649 | </Alert> |
| 647 | </Section> | 650 | </Section> |
| 648 | ); | 651 | ); |
| 649 | } | 652 | } |
| @@ -778,38 +781,43 @@ function OpenApiSourceDetailPageReady(props: { · 128 unmodified lines | |||
| 778 | })} | 781 | })} |
| 779 | actions={( | 782 | actions={( |
| 780 | <> | 783 | <> |
| 781 | <button | 784 | <Button |
| 785 | variant="outline" | ||
| 786 | size="sm" | ||
| 782 | type="button" | 787 | type="button" |
| 783 | onClick={() => { | 788 | onClick={() => { |
| 784 | void refreshMutation.mutateAsync(props.source.id); | 789 | void refreshMutation.mutateAsync(props.source.id); |
| 785 | }} | 790 | }} |
| 786 | disabled={refreshMutation.status === "pending"} | 791 | disabled={refreshMutation.status === "pending"} |
| 787 | className="inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground disabled:pointer-events-none disabled:opacity-50" | ||
| 788 | > | 792 | > |
| 789 | {refreshMutation.status === "pending" ? "Refreshing..." : "Refresh"} | 793 | {refreshMutation.status === "pending" ? "Refreshing..." : "Refresh"} |
| 790 | </button> | 794 | </Button> |
| 791 | <button | 795 | <Button |
| 796 | variant="outline" | ||
| 797 | size="sm" | ||
| 792 | type="button" | 798 | type="button" |
| 793 | onClick={() => void navigation.edit(props.source.id)} | 799 | onClick={() => void navigation.edit(props.source.id)} |
| 794 | className="inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground" | ||
| 795 | > | 800 | > |
| 796 | <IconPencil className="size-3" /> | 801 | <IconPencil className="size-3" /> |
| 797 | Edit | 802 | Edit |
| 798 | </button> | 803 | </Button> |
| 799 | {confirmDelete ? ( | 804 | {confirmDelete ? ( |
| 800 | <div className="flex items-center gap-2"> | 805 | <div className="flex items-center gap-2"> |
| 801 | <span className="text-[11px] font-medium text-destructive"> | 806 | <span className="text-[11px] font-medium text-destructive"> |
| 802 | Confirm delete? | 807 | Confirm delete? |
| 803 | </span> | 808 | </span> |
| 804 | <button | 809 | <Button |
| 810 | variant="outline" | ||
| 811 | size="sm" | ||
| 805 | type="button" | 812 | type="button" |
| 806 | onClick={() => setConfirmDelete(false)} | 813 | onClick={() => setConfirmDelete(false)} |
| 807 | disabled={removeMutation.status === "pending"} | 814 | disabled={removeMutation.status === "pending"} |
| 808 | className="inline-flex items-center rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground disabled:pointer-events-none disabled:opacity-50" | ||
| 809 | > | 815 | > |
| 810 | Cancel | 816 | Cancel |
| 811 | </button> | 817 | </Button> |
| 812 | <button | 818 | <Button |
| 819 | variant="destructive-outline" | ||
| 820 | size="sm" | ||
| 813 | type="button" | 821 | type="button" |
| 814 | onClick={() => { | 822 | onClick={() => { |
| 815 | void removeMutation.mutateAsync(props.source.id).then(() => { | 823 | void removeMutation.mutateAsync(props.source.id).then(() => { |
| @@ -821,20 +829,20 @@ function OpenApiSourceDetailPageReady(props: { · 5 unmodified lines | |||
| 821 | }); | 829 | }); |
| 822 | }} | 830 | }} |
| 823 | disabled={removeMutation.status === "pending"} | 831 | disabled={removeMutation.status === "pending"} |
| 824 | className="inline-flex items-center rounded-md border border-destructive/25 bg-destructive/5 px-2.5 py-1 text-[12px] font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 825 | > | 832 | > |
| 826 | {removeMutation.status === "pending" ? "Deleting..." : "Delete"} | 833 | {removeMutation.status === "pending" ? "Deleting..." : "Delete"} |
| 827 | </button> | 834 | </Button> |
| 828 | </div> | 835 | </div> |
| 829 | ) : ( | 836 | ) : ( |
| 830 | <button | 837 | <Button |
| 838 | variant="destructive-outline" | ||
| 839 | size="sm" | ||
| 831 | type="button" | 840 | type="button" |
| 832 | onClick={() => setConfirmDelete(true)} | 841 | onClick={() => setConfirmDelete(true)} |
| 833 | disabled={removeMutation.status === "pending"} | 842 | disabled={removeMutation.status === "pending"} |
| 834 | className="inline-flex items-center rounded-md border border-destructive/25 bg-destructive/5 px-2.5 py-1 text-[12px] font-medium text-destructive transition-colors hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50" | ||
| 835 | > | 843 | > |
| 836 | Delete | 844 | Delete |
| 837 | </button> | 845 | </Button> |
| 838 | )} | 846 | )} |
| 839 | </> | 847 | </> |
| 840 | )} | 848 | )} |