zebflow 0.11.13

Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
Documentation
import { Dialog } from "@/components/ui/dialog";
import DialogContent from "@/components/ui/dialog-content";
import DialogHeader from "@/components/ui/dialog-header";
import DialogTitle from "@/components/ui/dialog-title";
import DialogFooter from "@/components/ui/dialog-footer";
import Button from "@/components/ui/button";

/**
 * Installing a node bundle you already have as a file.
 *
 * Behind a button rather than open on the page: it is the rare path — most
 * people came to the Hub to browse — and as a permanent block it pushed the
 * catalogue below the fold.
 *
 * Composed as header / body / footer rather than dropping content straight into
 * `DialogContent`: the padding lives in those three, so content placed directly
 * inside sits flush against the edge.
 */
export default function InstallFromFileDialog({ open, onClose, children }) {
  return (
    <Dialog open={open} onOpenChange={(next) => (next ? null : onClose())}>
      <DialogContent className="max-w-[42rem]">
        <DialogHeader>
          <DialogTitle>Install a node bundle from a file</DialogTitle>
          <p className="text-sm text-muted-foreground">
            It runs the same review a published package runs. A Hub package is not safer,
            only published.
          </p>
        </DialogHeader>
        <div className="px-6 py-4">{children}</div>
        <DialogFooter>
          <Button type="button" variant="outline" size="sm" onClick={onClose}>
            Close
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}